Здравствуйте!
Почему код внизу не работает в java 7 (предупреждение компилятора), а в java 8 работает?
interface Destination{
String readLabel();
}
public class Parcel9 {
// Argument must be final to use inside
// anonymous inner class:
public Destination destination(String dest) {
return new Destination() {
private String label = dest;
public String readLabel() { return label; }
};
}
public static void main(String[] args) {
Parcel9 p = new Parcel9();
Destination d = p.destination("Tasmania");
System.out.println(d.readLabel());
}
}
Ответ
В 8 яве компилятор сам вычисляет, является ли использованная вами переменная фактически финальной (т.е. вы не пытаетесь ей что-то присвоить) и позволяет скомпилировать, неявно подставив final
В 7 яве такого механизма нет и вам надо объявить аргумент как final для того, чтобы код скомпилировался.
Комментариев нет:
Отправить комментарий