Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从匿名内部类访问非final变量?_Java_Oop_Final_Anonymous Inner Class - Fatal编程技术网

Java 如何从匿名内部类访问非final变量?

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,但没有被重新分配,这使得它“实际上是

我有两个Java类

  • 测试记录
  • 测试2
  • 在这两个类中,我编写了相同的逻辑。但在TestLogging类中,我不允许访问匿名内部类中的非final变量

    但在Test2类中,为什么允许我访问匿名内部类中的非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类相当长。可能重复的请以文本形式发布代码,而不是以截图形式发布。