Java 如何从匿名内部类访问非final变量?
我有两个Java类Java 如何从匿名内部类访问非final变量?,java,oop,final,anonymous-inner-class,Java,Oop,Final,Anonymous Inner Class,我有两个Java类 测试记录 测试2 在这两个类中,我编写了相同的逻辑。但在TestLogging类中,我不允许访问匿名内部类中的非final变量 但在Test2类中,为什么允许我访问匿名内部类中的非final变量 如何从匿名内部类访问非final变量?差异是由于您编译的JDK版本(或目标版本)不同 Java8理解“有效的最终变量”。在使用JDK 8编译时,不必显式地将变量声明为final,以便在匿名类中引用它 换句话说,变量s,虽然没有声明为final,但没有被重新分配,这使得它“实际上是
如何从匿名内部类访问非final变量?差异是由于您编译的JDK版本(或目标版本)不同 Java8理解“有效的最终变量”。在使用JDK 8编译时,不必显式地将变量声明为
final
,以便在匿名类中引用它
换句话说,变量s
,虽然没有声明为final,但没有被重新分配,这使得它“实际上是final”(查看更多信息)
在Java8(以及您的另一个项目-
TestLogging
)的目标版本为1.5之前,变量必须显式声明为final不同之处在于您编译的JDK版本(或目标版本)
Java8理解“有效的最终变量”。在使用JDK 8编译时,不必显式地将变量声明为final
,以便在匿名类中引用它
换句话说,变量s
,虽然没有声明为final,但没有被重新分配,这使得它“实际上是final”(查看更多信息)
在Java8(以及您的另一个项目-
TestLogging
)的目标版本为1.5之前,变量必须显式声明为final检查Java版本的maven配置
检查java版本的maven配置
边注:考虑使用lambda表达式来最小化代码。看,这是一个技巧性的问题,在屏幕视图下隐藏着一些东西,使一切都以某种方式解决了吗?您的Test2类相当长。请将您的代码复制为文本,而不是截图。侧注释:考虑使用lambda表达式来最小化代码。看,这是一个技巧性的问题,在屏幕视图下隐藏着一些东西,使一切都以某种方式解决了吗?您的Test2类相当长。可能重复的请以文本形式发布代码,而不是以截图形式发布。