前几天使用lamdba时,报了一个这个错,原因是在lamdba体中使用了一个变量,觉得很奇怪!

今天在读这本书的时候,又看到了这个解释,这里有了更深刻的理解,总结一下:

local variables referenced from a Lambda expression must be final or effectively final------理解

 

在jdk1.8之前在使用匿名内部类的时候方法里面的变量必须需要加final

local variables referenced from a Lambda expression must be final or effectively final------理解

 

 否则是会报错的,但是jdk1.8放松了这个限制,可以使用非final修饰,但是这个变量,是不允许另外赋值的,否则lamdba体重也会报错,如图:

local variables referenced from a Lambda expression must be final or effectively final------理解

local variables referenced from a Lambda expression must be final or effectively final------理解

换句话说,Lambda 表达式引用的是值,而不是变量.所以在lamdba和匿名内部类中使用变量不能被改变

如果你试图给该变量多次赋值,然后在 Lambda 表达式中引用它,编译器就会报错,典型的就是在for循环里使用lamdba了,如果你需要用到for循环的i变量,那么lamdba是不合适的:

local variables referenced from a Lambda expression must be final or effectively final------理解

 

相关文章:

  • 2021-05-10
  • 2021-07-17
  • 2022-12-23
  • 2022-02-06
  • 2022-12-23
  • 2022-01-09
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-29
  • 2022-01-15
  • 2022-12-23
  • 2022-12-23
  • 2021-12-02
相关资源
相似解决方案