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

Java-在匿名内部类中使用非最终变量?

颛孙航
2023-03-14

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

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;

public class Main {
    public Main(String[] args) {
        JLabel jLabel = new JLabel();
        JButton button = new JButton();
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                jLabel.setText("xyz");

            }
        });
    }
}

共有1个答案

丁景山
2023-03-14

较新的java版本在这方面更加宽容:它们只要求它们应该是“有效的最终版本”。

最后,区别并不大--您只能使用可以用final标记的变量;您不能修改它们。

如果您在那个地方,您也可以使它们“真的”final,它在任何地方都有效。

button.addActionListener((ActionEvent arg0) -> jLabel.setText("xyz"));
 类似资料:
  • 问题内容: 如何在我的匿名内部子类中获取传递给此方法的值? 我收到此错误: 无法在以其他方法定义的内部类中引用非最终变量userID 我很确定我不能将其赋值为final,因为它是一个未知值的变量。我听说这种语法确实以某种方式保留了作用域,所以我认为必须有一个我不太了解的语法技巧。 问题答案: 当然,您可以将其分配为final-只需将该关键字放入参数的声明中即可: 我不确定这是一个未知值的变量是什么

  • 问题内容: 在我的某些项目和某些书中,据说最好 不要 使用内部类(不管是匿名与否,静态还是非静态),除非在某些受限制的条件下(例如s或s)。在我的第一个行业项目中,他们甚至被“禁止”。 这真的是最佳做法吗?为什么? (我不得不说我经常使用它们…) -编辑— 在所有这些答复中我都找不到一个正确的答案:大多数答复中都包含正确的部分:我仍将使用内部类,但我将尽量少使用它们! 问题答案: 在我看来,Jav

  • 问题内容: Java中匿名类的用途是什么?我们可以说使用匿名类是Java的优势之一吗? 问题答案: 使用某些“额外”(例如覆盖方法)创建对象的实例时,匿名内部类会变得很有用,而不必实际继承一个类。 我倾向于将它用作附加事件侦听器的快捷方式: 使用此方法可以使编码更快一些,因为我不需要创建额外的类来实现我可以实例化一个匿名内部类而无需实际创建单独的类。 我仅将这种技术用于“快速而肮脏的”任务,在这些

  • 问题内容: 关于编译器错误,有一些关于Stack Overflow的主题,解决方案是“将其声明为最终的,您就完成了”,但是对于这个 理论性的 问题,我想检查一下该代码无法编译的逻辑原因是什么: (解决方案:声明为final),而这一点却做到了: 我真的很困惑 不是最终值,它可以多次更改,而的可怜参数只能在其方法体内更改,而是由编译器负责;) 甚至编译器错误也误导了我。: 与什么不同?与内部类不是在

  • 我偶然发现了这个技巧,用于将值从匿名内部类获取到在外部类中声明的变量。它有效,但它感觉像一个肮脏的黑客: (是的,我意识到这个例子可以用一个简单的<code>JOptionPane,但我不能将<code>myValue

  • 问题内容: 在通过构造函数传递给匿名类的最终变量中,Jon Skeet提到了变量是通过自动生成的构造函数传递给匿名类实例的。在这种情况下,为什么我看不到使用反射的构造函数: } 输出为: 问题答案: 这是您的程序在我的系统上输出的内容: 因此,构造函数在那里。但是,它是无参数的。从反汇编来看,发生的事情是编译器发现它不需要传递给它,因为它的值在编译时就知道了。 如果我这样更改代码: 现在生成的构造