java - 为什么要将内部类外部字段的修饰符改为final?

标签 java final anonymous-inner-class

我有一个问题,当我们在内部类中使用字段时,为什么要设置它? 例如为什么我们要把textField的修饰符设置为final? 我的问题是,如果我们不宣布它为最终版本,为什么它不可用?

  final TextField textField = new TextField();
    Button b = new Button();
    b.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            textField.setText("hello");
        }
    });

最佳答案

原因是从匿名类内部访问的变量值被复制。如果可以从类外部修改变量,则会产生陈旧(过时)的值,这可能会影响程序的正确性并产生意外的结果。 Java 通过强制您将这些变量声明为最终变量并因此不可修改来避免此问题。

关于java - 为什么要将内部类外部字段的修饰符改为final?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20161159/

相关文章:

java - 为什么 Java 中的局部变量不被视为 "effectively final",即使之后没有任何修改?

java - 匿名类——我们可以为同一个匿名类创建两个新对象吗?

java - 匿名内部类内部方法

java - 字符串在匿名内部类之外变为 null

java - 如何将用户输入的0或负数后输入的所有内容相加?!使用 do-while 语句

java - 无法解析滑动菜单 fragment 中的符号 'TabLayout'

Java Axis2 发生意外错误。 407 需要代理验证

java - 将 .dll 导入与 Java 中的文件相同的目录中

java - 我们可以不使用 final 关键字来避免继承吗?

java - 我应该如何根据用户输入设置静态最终变量?