核心思路:不要直接赋值,使用中间变量。
定义一个变量value,等于i,然后给线程内部去使用,在jdk1.8是能够识别的,不会抛出异常。
Java 7 要求 version 这个局部变量必须是 final 类型的,否则在匿名类中不可引用。我们知道,lambda 表达式是由匿名内部类演变过来的
,它们的作用都是实现接口方法,于是类比匿名内部类,lambda 表达式中使用的变量也需要是 final 类型。
但是int value 没有声明final为什么可以用?
Java 8 之后,在匿名类或 Lambda 表达式中访问的局部变量,如果不是 final 类型的话,编译器自动加上 final 修饰符,即 Java8 新特性:effectively final。