Java Difference between final and effectively final

Java Difference between final and effectively final,第1张

Java Difference between final and effectively 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://outofmemory.cn/zaji/4932914.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存