Variable used in lambda expression should be final or effectively final

转载  David_jiahuan   2020-08-12   61人阅读  0 条评论

这个是在java代码开发中遇到的问题;

主要的关键词是“lambda表达式”,“final”;

========================================================

通过网上的搜索发现:Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误。

========================================================

出现上面这种错误的可能原因是:lambda表达式中用到的变量是没有用final定义的外部局部变量;

========================================================

正确的例子:

Java 7 要求 version 这个局部变量必须是 final 类型的,否则在匿名类中不可引用。

我们知道,lambda表达式是由匿名内部类演变过来的,他们的作用都是实现接口方法,于是类比匿名内部类,lambda表达式中使用的变量也需要是final类型。但是又发现个现象,如图:

finalItemMap并没有定义为final类型,编译却能通过,这又是怎么回事呢?

其实是因为 Java 8 之后,在匿名类或 Lambda 表达式中访问的局部变量,如果不是 final 类型的话,编译器自动加上 final 修饰符。

image.pngimage.png

本文地址:https://www.zjh336.cn/?id=1949
温馨提示:文章内容系作者个人观点,不代表华仔部落对观点赞同或支持。
版权声明:本文为转载文章,来源于 David_jiahuan ,版权归原作者所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?