匿名内部类使用的外部变量为什么要是final
2017-04-15 20:22
141 查看
首先要了解什么是闭包。
java内部类由于含有对外部类的引用,所以可以正常访问外部变量。
但java对于闭包的处理仅限于普通的内部类,对于匿名内部类则不存在完善的处理方法。
下面是一个java匿名内部类
jvm的处理方法为:
由此可见,匿名内部类只是复制了一份值,而不是传递了引用。这也是为什么编译器要求闭包的处理参数必须是final的原因。
不仅是匿名内部类,在方法中的内部类,在方法块中的内部类,都要求闭包参数为final。
java内部类由于含有对外部类的引用,所以可以正常访问外部变量。
但java对于闭包的处理仅限于普通的内部类,对于匿名内部类则不存在完善的处理方法。
下面是一个java匿名内部类
jvm的处理方法为:
由此可见,匿名内部类只是复制了一份值,而不是传递了引用。这也是为什么编译器要求闭包的处理参数必须是final的原因。
不仅是匿名内部类,在方法中的内部类,在方法块中的内部类,都要求闭包参数为final。
注意:java1.8版本解决了这个问题。
相关文章推荐
- java匿名内部类使用外部变量时,外部变量必须是final,为什么?
- 局部内部类访问外部变量为什么需要使用final修饰
- 为什么内部类访问的外部变量需要使用final修饰
- 为什么内部类访问的外部变量需要使用final修饰
- 匿名内部类使用的外部变量为什么要是final的
- 匿名内部类 使用外部的变量为什么要声明成final
- java匿名内部类使用外部变量时,外部变量必须是final,为什么?
- 使用匿名内部类,隐式调用外部变量,外部变量需要final修饰
- 为什么内部类访问的外部变量需要使用final修饰
- java匿名内部类使用外部变量时,外部变量必须是final,为什么?
- 匿名内部类 使用外部的变量为什么要声明成final
- 为什么内部类访问的外部变量需要使用final修饰
- Java中内部类中使用外面变量为什么final修饰?
- 匿名内部类为什么要使用final类型变量
- 内部类使用final外部变量
- 匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型
- 内部类访问的外部变量需要使用final修饰解释原因
- 使用外部类变量时为什么需要final修饰【转】
- 为什么Java接口里使用public static final修饰成员变量
- 【JAVA】在线程里使用线程外的变量为什么一定要是final类型