方法中内部类只能访问外围类final型变量的原因
方法中的内部类只能使用外围类中final型的变量,网上有很多分析这样的原因,但是很少能够完全分析到位的。
1.内部类中也不一定只能使用final型的变量,如果这个参数直接传给了内部类的构造方法,而且没有在内部类中使用,那这样也是能够通过编译的,所以网上有说是由于生命周期的原因,个人觉得不是太准确,因为如果是由于生命周期的问题,这个时候也应该只能允许final型的才对,因为这个时候基类中是可以改变这个变量的值的,但是这个很明显就是传了一个参数给构造函数,所以也不会造成误解(见第3点),所以就没有final型的限制。
2.其实在内部类中使用变量参数时,编译过程中内部类是在内部类对象中生成了一个变量和外围类中这个变量时一样的名字,这样做有助于把内部类和一般的类统一处理,提高了效率(并不需要判断哪些是外围类哪些是内部类,执行过程中他们都是对象)。
3.基于第2点,实际上就相当于是两个名字一样的变量,但是在程序员眼里它们又都是在同一方法里面使用,他们会觉得就是同一个变量,为了避免这样的错误,编译器就干脆要求是final型的。