如何彻底解决Variable used in lambda expression should be final or effectively final

核心思路:不要直接赋值,使用中间变量。

定义一个变量value,等于i,然后给线程内部去使用,在jdk1.8是能够识别的,不会抛出异常。

Java 7 要求 version 这个局部变量必须是 final 类型的,否则在匿名类中不可引用。我们知道,lambda 表达式是由匿名内部类演变过来的,它们的作用都是实现接口方法,于是类比匿名内部类,lambda 表达式中使用的变量也需要是 final 类型。

但是int value 没有声明final为什么可以用?

Java 8 之后,在匿名类或 Lambda 表达式中访问的局部变量,如果不是 final 类型的话,编译器自动加上 final 修饰符,即 Java8 新特性:effectively final。


版权声明:本文为sunyufeng22原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。