当前位置: 首页 > 知识库问答 >
问题:

Java停止了内部类中非最终变量的错误(Java8)[重复]

陆正奇
2023-03-14
public class Runner {   
    public static void main(String[] args) {

        String message = "Hello world";

        new Runnable() {
            @Override
            public void run() {
                System.out.println(message);
            }
        }.run();
    }
}

共有1个答案

桂阳文
2023-03-14

Java8隐式地使message成为最终的,因为它永远不会被修改。尝试在代码中的任何地方修改它,您将得到一个编译错误(因为这删除了隐式的final)。

这被称为有效的最终。引用文件:

然而,从Java SE8开始,一个本地类可以访问封闭块的局部变量和参数,这些变量和参数是final或实际上是final。一个变量或参数,其值在初始化后从未更改,实际上是final的。

 类似资料:
  • 问题内容: Java 7在以下代码上说:“无法引用封闭范围中定义的非最终局部变量消息”: Java 8没有。 怀疑这是关于向Java添加功能编程功能。 它是否类似地处理代码? 问题答案: Java8隐式将其定为final,因为它从未被修改。尝试在代码中的任何地方修改它,您将得到一个编译错误(因为这会删除隐式的)。 这实际上称为 final 。引用文档: 但是,从Java SE 8开始,本地类可以访

  • 我还是Java新手,我试图创建一个内部类并在main中调用该方法。有一个编译错误说 非静态变量 - 这不能从静态上下文中引用 请帮忙

  • 问题内容: 我对Java还是陌生的,我尝试创建一个内部类并在main内部调用该方法。但是出现编译错误,提示“非静态变量-不能从静态上下文中引用” 请帮忙 问题答案: 一个 内部 类需要的的一个实例的引用 外 类以构造。如果您的类在逻辑上不需要它,请使用修饰符将其设置为“仅嵌套类”: 编辑:要创建一个作为 内部 类的实例,您可以使用类似以下内容的方法: 或更简短地说: …但是除非您真的 想要 引用封

  • 在此代码示例中,ActionListener的actionPerformed函数中没有使用最终对象jLabel:

  • 问题内容: 我正在尝试将java8 forEach循环内的布尔变量更改为true,这是非最终的。但是我遇到了以下错误:在封闭范围内定义的必需局部变量必须是final或有效的final。 如何解决这个错误? 代码: 这是我在函数中创建的变量。 现在,当我尝试更改它时: 我收到错误消息:封闭范围中定义的必需局部变量必须是final或有效的final。 为什么会出现此错误,以及如何解决? 问题答案: 您

  • 问题内容: 尝试在内部类内部使用一个类的本地成员时遇到此错误。我知道将其声明为final将解决此问题,但我读到Java 8应该自动处理它,因为我将Intellij与Java 8一起使用,但它仍然无法编译。还有其他方法可以在不将其声明为final的情况下进行修复吗?谢谢。 问题答案: 我知道将其声明为final将解决此问题,但我读到Java 8应该自动处理它。 如果变量 有效地为final ,则Ja