小编典典

最终和有效最终之间的区别

all

我正在使用 Java 8 中的 lambdas,但遇到了警告local variables referenced from a lambda expression must be final or effectively final。我知道当我在匿名类中使用变量时,它们在外部类中必须是
final 的,但是仍然 - final有效 final 之间有什么区别?


阅读 66

收藏
2022-03-28

共1个答案

小编典典

…从 Java SE 8 开始,本地类可以访问最终或有效最终的封闭块的局部变量和参数。
一个变量或参数,其值在初始化后永远不会改变,它实际上是最终的。

例如,假设变量numberLength未声明为 final,并且您在PhoneNumber构造函数中添加了标记的赋值语句:

public class OutterClass {

  int numberLength; // <== not *final*

  class PhoneNumber {

    PhoneNumber(String phoneNumber) {
        numberLength = 7;   // <== assignment to numberLength
        String currentNumber = phoneNumber.replaceAll(
            regularExpression, "");
        if (currentNumber.length() == numberLength)
            formattedPhoneNumber = currentNumber;
        else
            formattedPhoneNumber = null;
     }

  ...

  }

...

}

由于这个赋值语句,变量 numberLength 不再是有效的 final 了。 结果,Java
编译器生成类似于“从内部类引用的局部变量必须是最终或有效最终”的错误消息,
其中内部类 PhoneNumber 尝试访问 numberLength
变量:

http://codeinventions.blogspot.in/2014/07/difference-between-final-
and.html

http://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html

2022-03-28