However, starting in Java SE 8, a local class can access local variables and parameters of the enclosing block that are final or effectively final. A variable or parameter whose value is never changed after it is initialized is effectively final.
https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html
简单来说,如果只读一个外部变量,不再需要指定成final了。
而在之前,常见的匿名内部类访问外部局部变量必须指定成final。
下面这段代码1.8就可以执行,1.7就会编译报错。
1 | public void test(){ |
1.7报错内容:Error:(22, 36) java: 从内部类中访问本地变量aa; 需要被声明为最终类型
当你要修改的外部变量时,在1.8下也会直接报错:
1 | public void test(){ |
1.8报错内容Error:(34, 17) java: 从内部类引用的本地变量必须是最终变量或实际上的最终变量
(needs to be final or effectively final)