【问题标题】:What does a variable being "effectively final" mean? [duplicate]“有效最终”的变量是什么意思? [复制]
【发布时间】:2014-02-23 18:20:05
【问题描述】:

匿名类状态中的documentation

匿名类无法访问其封闭范围内的局部变量 未声明为最终或有效最终的。

我不明白变量是“有效的最终”是什么意思。谁能提供一个例子来帮助我理解这意味着什么?

【问题讨论】:

标签: java final anonymous-class


【解决方案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

【讨论】:

猜你喜欢
  • 2011-05-22
  • 2011-06-11
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 2012-03-17
  • 2017-12-27
  • 1970-01-01
相关资源
最近更新 更多