引用自《Thinking in Java》:
“闭包也是一种为表示带有自由变量的过程而用的实现技术
”
为什么Java中匿名类引用外部的局部变量必须是final类型的
因为理论上 匿名类和外部的局部变量应该是同一个引用(注意是一个引用而不是多个引用指向同一个对象
)。但是由于两者的生命周期不同,并且没有确定的先后关系,对于内部类闭包,由于内部类实例生命周期晚于外部类所以不需要为final,但是由于匿名类没有这种先后关系,所以实际上,他们是不同的引用,但是为了保证逻辑上的一致性,将匿名内部类强制为final。
参考资料: