最终和有效最终的差异

问题:

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

回答:

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

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

PhoneNumber(String phoneNumber) {
numberLength = 7; // <== assignment to numberLength String currentNumber = phoneNumber.replaceAll( regularExpression, ""); if (currentNumber.length() == numberLength) formattedPhoneNumber = currentNumber; else formattedPhoneNumber = null; } [/code] 由于这个赋值语句,变量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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Difference between final and effectively final

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 4 = 4