Ответ 1
Эффективно конечный означает, что он не изменяется после получения начального значения.
Простой пример:
public void myMethod() {
int a = 1;
System.out.println("My effectively final variable has value: " + a);
}
Здесь a
не объявляется окончательным, но считается эффективным окончательным, поскольку он никогда не изменяется.
Начиная с Java 8, это можно использовать следующим образом:
public void myMethod() {
int a = 1;
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("My effectively final variable has value: " + a);
}
};
}
В Java 7 и более ранних версиях a
должен был быть объявлен final
для использования в локальном классе, подобном этому, но из Java 8 достаточно, чтобы он был окончательным.