如何从匿名内部类访问非最终变量?

时间:2018-10-11 05:12:20

标签: java oop final anonymous-inner-class

我有2个Java类。

  1. TestLogging
  2. Test2

在两个类中,我都编写了相同的逻辑。但是在TestLogging类中,不允许我访问匿名内部类中的非最终变量。

但是在Test2类中,为什么允许我在匿名内部类中访问非最终变量?

TestLogging

Test2

如何从匿名内部类访问非最终变量?

2 个答案:

答案 0 :(得分:4)

差异是由于您要针对其编译的JDK版本(或目标版本)引起的。

Java 8理解“有效最终” 变量。在使用JDK 8进行编译的地方,不必为了在匿名类中引用该变量而将变量明确声明为final

换句话说,变量s尽管没有声明为final,但不会被重新分配,这使其成为“有效的final”(有关更多信息,请查看this answer)。

在Java 8(和您的其他项目TestLogging-具有1.5的目标版本)之前,必须将变量明确声明为final

答案 1 :(得分:2)

检查Java版本的Maven配置 enter image description here