前几天使用lamdba时,报了一个这个错,原因是在lamdba体中使用了一个变量,觉得很奇怪!
今天在读这本书的时候,又看到了这个解释,这里有了更深刻的理解,总结一下:
在jdk1.8之前在使用匿名内部类的时候方法里面的变量必须需要加final
否则是会报错的,但是jdk1.8放松了这个限制,可以使用非final修饰,但是这个变量,是不允许另外赋值的,否则lamdba体重也会报错,如图:
换句话说,Lambda 表达式引用的是值,而不是变量.所以在lamdba和匿名内部类中使用变量不能被改变
如果你试图给该变量多次赋值,然后在 Lambda 表达式中引用它,编译器就会报错,典型的就是在for循环里使用lamdba了,如果你需要用到for循环的i变量,那么lamdba是不合适的: