lambda 内使用的局部变量必须是final的

  • Post author:
  • Post category:其他


在开发代码中遇到一个问题,使用lambda遍历map,外部有一个String,在循环中把 String 字符串的关键字进行替换,但是一直不能替换成功。


错误提示,使用的这个变量必须是final或者是实际上final的?为什么?

lambda是一个匿名内部类,内部类是指在一个外部类内部再定义一个类。内部类可以被static public default protected private修饰,外部顶级类(类名和文件名相同)只能使用public 和 default。   内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两个类。

内部类包括:

成员内部类

局部内部类

嵌套内部类

匿名内部类

匿名内部类:

编译时内部类和外部类编译成两个类,外部类传给内部类的参数是通过构造器复制给内部类的,如果内部类中吧参数值改变了,但是外部类又不会被改变,就会造成错误。1.7的时候要求必须明确用final修饰,1.8不用显示的用final修饰了



版权声明:本文为qq_35573689原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。