匿名内部类访问的外部类局部变量为什么要用final 修饰,jdk8为啥不需要了?
- 匿名内部类访问的外部类局部变量为什么要用final 修饰?
因为匿名内部类使用的是外部类局部变量的值,并非引用;通过反编译可以发现,外部类以及被访问的局部变量会通过构造方法传进去,对于局部变量,内部类使用的引用和外部类使用的并不是同一个,而如果局部变量不是final的话,当其中一方对其重新赋值就会导致内部类和外部类的数据不同步,所以要声明为final
关于外部类的全局变量为什么不用声明为final,是因为在内部类中是通过this来访问的,这个和外部类是同一个引用
- jdk8为啥不需要了?
jdk8其实使用了语法糖,自动加了final,其实和原来一样
网友评论