这个是在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 修饰符。
还没有评论,来说两句吧...