gpt4 book ai didi

java - 需要澄清 Java 中监听器匿名类的概念

转载 作者:行者123 更新时间:2023-12-01 13:30:38 24 4
gpt4 key购买 nike

我是java新手。监听器匿名内部类设计的目的是什么?我听说java中匿名类被用作监听器。并且没有人真正创建内部类甚至静态内部类。我不确定这是什么意思。有人可以解释一下这些概念吗?特别是这个监听器的设计以及它如何通过匿名类创建。

提前谢谢您。

最佳答案

匿名监听器通常看起来像这样:

myControl.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Handle event
}
});

使用内部类来实现相同的目标通常如下所示:

public void init()
{
myControl.addActionListener(new MyActionListener());
}

private class MyActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
// Handle event
}
}

现在考虑一下这两者在更大的程序范围内会是什么样子。匿名监听器仍然位于您添加它的位置。内部类可能完全位于源文件中的其他位置。有了一个好的 IDE,这种差异可以最小化(例如成员(member)浏览器),但是对于您将要使用一次的东西真的需要一个全新的类吗?

当然,根据应用程序的具体需求,单独的类实际上可能是更好的选择。例如,如果您有许多仅略有不同的监听器,您可以按照以下方式构建一些内容:

public void init()
{
myControl1.addActionListener(new MyActionListener("foo"));
myControl2.addActionListener(new MyActionListener("bar"));
myControl3.addActionListener(new MyActionListener("baz"));
}

private class MyActionListener implements ActionListener
{
private String word;

public MyActionListener(String word)
{
this.word = word;
}

public void actionPerformed(ActionEvent e)
{
// Handle event
System.out.println(word);
}
}

就静态类而言:在 Java 中,内部类可以标记为 static,这一切的作用是防止它引用封闭类的实例。 (例如,MyProgram.MyStaticClass 将无法访问 MyProgram 中非静态的任何成员,除非它创建一个实例MyProgram。)这可能有助于分离关注点,但对于监听器而言并没有太大变化。

关于java - 需要澄清 Java 中监听器匿名类的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21590153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com