“有效最终”的变量是啥意思? [复制]
Posted
技术标签:
【中文标题】“有效最终”的变量是啥意思? [复制]【英文标题】:What does a variable being "effectively final" mean? [duplicate]“有效最终”的变量是什么意思? [复制] 【发布时间】:2014-02-23 18:20:05 【问题描述】:匿名类状态中的documentation
匿名类无法访问其封闭范围内的局部变量 未声明为最终或有效最终的。
我不明白变量是“有效的最终”是什么意思。谁能提供一个例子来帮助我理解这意味着什么?
【问题讨论】:
***.com/questions/20938095/… - 虽然我认为final
是从 Java 的伪闭包访问局部变量的要求(但我经常错/过时):-/
【参考方案1】:
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 就足够了。
【讨论】:
当我们用变量声明final关键字时编译器不允许我们改变变量值,但是根据有效的final,没有必要用变量声明final关键字,所以可以改变有效变量的值 ?这意味着当我们更改值时,变量实际上不是最终的? @Harmeet:确实,如果您更改了值,它将不再是有效的最终变量,因此您无法更改有效最终变量的值。【参考方案2】:根据docs:
一个变量或参数在初始化后其值永远不会改变是effectively final
。
【讨论】:
您可以添加指向相应文档的链接吗? @Behe 很抱歉错过了文档路径。请在 docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html 查找以上是关于“有效最终”的变量是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章