【发布时间】:2014-02-23 18:20:05
【问题描述】:
【问题讨论】:
-
stackoverflow.com/questions/20938095/… - 虽然我认为
final是从 Java 的伪闭包访问局部变量的要求(但我经常错/过时):-/
标签: java final anonymous-class
【问题讨论】:
final 是从 Java 的伪闭包访问局部变量的要求(但我经常错/过时):-/
标签: java final anonymous-class
Effectively final 意思是在得到初始值后就永远不会改变。
一个简单的例子:
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 开始,它实际上是 final 就足够了。
【讨论】:
根据docs:
一个变量或参数在初始化后其值永远不会改变是effectively final。
【讨论】: