“有效最终”的变量是啥意思? [复制]

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 查找

以上是关于“有效最终”的变量是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

函数签名中变量名前的 * 和 ** 是啥意思? [复制]

Java中循环局部变量初始化的最有效方法是啥? [复制]

C#中变量名前的@符号是啥意思? [复制]

在python中,双星后跟变量名是啥意思? [复制]

Java 枚举类型中受保护的变量是啥意思? [复制]

在 PHP 中声明变量时 `<<` 是啥意思? [复制]