我有2个Java类。
在两个类中,我都编写了相同的逻辑。但是在TestLogging类中,不允许我访问匿名内部类中的非最终变量。
但是在Test2类中,为什么允许我在匿名内部类中访问非最终变量?
如何从匿名内部类访问非最终变量?
答案 0 :(得分:4)
差异是由于您要针对其编译的JDK版本(或目标版本)引起的。
Java 8理解“有效最终” 变量。在使用JDK 8进行编译的地方,不必为了在匿名类中引用该变量而将变量明确声明为final
。
换句话说,变量s
尽管没有声明为final,但不会被重新分配,这使其成为“有效的final”(有关更多信息,请查看this answer)。
在Java 8(和您的其他项目TestLogging
-具有1.5的目标版本)之前,必须将变量明确声明为final
答案 1 :(得分:2)