当前位置: 首页 > 面试题库 >

Java停止对内部类中的非最终变量进行错误处理(Java 8)

董高洁
2023-03-14
问题内容

Java 7在以下代码上说:“无法引用封闭范围中定义的非最终局部变量消息”:

public class Runner {   
    public static void main(String[] args) {

        String message = "Hello world";

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

Java 8没有。

怀疑这是关于向Java添加功能编程功能。

它是否类似地处理代码?


问题答案:

Java8隐式将message其定为final,因为它从未被修改。尝试在代码中的任何地方修改它,您将得到一个编译错误(因为这会删除隐式的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