“Effectively final”意味着在获取初始值后从未更改。
一个简单的例子:
public void myMethod() {
int a = 1;
System.out.println("My effectively final variable has value: " + a);
}
这里,a
没有声明为 final,但由于它从未被更改,因此被视为 有效的 final。
从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开始,它只需要是有效的final即可。