gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:07:55 26 4
gpt4 key购买 nike

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

最佳答案

...从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

关于java - 最终和有效最终之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58392574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com