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

标签 java oop final anonymous-inner-class

我有 2 个 Java 类。

  1. 测试记录
  2. 测试2

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

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

TestLogging

Test2

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

最佳答案

差异是由于您正在编译的 JDK 版本(或目标版本)造成的。

Java 8 理解“有效的最终”变量。如果使用 JDK 8 进行编译,则不必将变量显式声明为 final 即可在匿名类中引用它。

换句话说,变量s虽然没有声明为final,但没有被重新分配,这使得它“实际上是final”(查看this answer以获取更多信息)。

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

关于java - 如何从匿名内部类访问非最终变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52752646/

相关文章:

java - 单元测试中的模拟域实体

java - Android/Java 重复按钮点击

java - 在不同类之间共享 HashMap 和其他一些数据结构

java - 抽象类中的最终变量

dart - 如何在 Dart 构造函数中设置 final/const 属性

java - 保持 Java 程序无限期运行的有效方法?

java - 如何在某些按钮上添加图像图标?

c - 使用 C 语言进行数据封装的 OOP 编程

oop - 面向组件和面向对象的语言有什么区别?

c++11 - C++11 中的最终非多态类