我如何能够从匿名内部 class 访问非最终变量?

How am I able to access non-final variable from anonymous inner class?

我有 2 Java classes.

  1. 测试日志
  2. 测试2

在两个 classes 中我都写了相同的逻辑。但是在 TestLogging class 中,我不允许访问匿名内部 class.

中的非最终变量

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

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

不同之处在于您正在编译的 JDK 版本(或目标版本)。

Java 8理解"effectively final"变量。在使用 JDK 8 编译的地方,您不必显式地将变量声明为 final 以便在匿名 class.

中引用它

换句话说,变量 s 虽然没有声明为 final,但没有被重新分配,这使得它成为 "effectively final"(查看 this answer 了解更多信息)。

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

检查 java 版本的 Maven 配置