Java8之前的局部内部类和匿名内部类访问的局部变量必须由 final 修饰,以保证内部类和外部类的数据一致性.
这个数据一致性比较模糊,再清楚点讲就是:局部内部类和匿名内部类,如果可以传递非Final的变量,那如果在内部类中对该对象进行了操作的同时,外部又对该属性进行了操作,就会造成数据的不一致性或者说不能保证数据的安全性cuiyaonan2000@163.com
这里主要说明下Java8引入lambda之后,针对局部内部类和匿名内部类的影响cuiyaonan2000@163.com
首先看下lambda针对作用域的说明

同时针对JDK8我们可以访问外部部变量,但是有个前提即:
lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义) -----这个所谓的隐形final语义就是Effectively final cuiyaonan2000@163.com
参考资料: