Trên Java 1.8, bạn không phải xác định trường là final
để được truy cập từ các lớp ẩn danh.Truy cập trường ẩn danh trên khả năng tương thích Java 1.8 với phiên bản cũ
Ví dụ, trên các phiên bản cũ:
public void foo(final int bar) {
new Runnable() {
public void run() {
System.out.println(bar);
}
};
}
Nhưng, bây giờ, trên Java 1.8, bar
không cần phải thức:
public void foo(int bar) {
new Runnable() {
public void run() {
System.out.println(bar);
}
};
}
Vì vậy, nếu tôi lập dự án của tôi, và tài nguyên duy nhất được thực hiện trên Java 1.8 Tôi đang sử dụng là điều này (tôi không sử dụng bất kỳ lambdas, các lớp mới, vv), mã của tôi có thể thực thi được trên các máy tính có các phiên bản Java cũ hơn không? Nếu không, tại sao?
Bạn có thể bỏ lỡ này [Sự khác nhau giữa thức và hiệu quả chính thức] (http://stackoverflow.com/questions/20938095/difference-between-final-and-effectively-final) –
'javac' chỉ đơn giản là không cho phép bạn kết hợp' -source 1.8' với '-target 1.7'. – Holger
Tắt tiếp tuyến, nhưng tôi không muốn viết mã 1.8 mà không khai báo rõ ràng các biến hoặc biến cuối cùng của tôi dưới dạng * final *. Không giống như các ngôn ngữ khác nơi mà args và vars có hiệu quả bất biến theo mặc định, Java, ngôn ngữ, đã luôn làm cho chúng có thể thay đổi, theo mặc định. Vì vậy, bây giờ, Java 1.8 đang làm điều kỳ diệu đằng sau hậu trường làm mờ hiệu quả dòng của những gì có thể thay đổi và những gì không. Ý tưởng khủng khiếp khi nói đến khả năng đọc mã. –