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

单独的监听器类与实现接口与匿名内部类?

缪志新
2023-03-14

使用(方法1)单独的侦听器类(可能是内部类)的好处/缺点是什么:

private ClassAAL implements ActionListener
{
    ...
}
private ClassAWL implements WindowListener
{
    ...
}

与(方法2)实现接口

public class ClassA implements ActionListener, WindowListener

与(方法3)相比,为每个需要侦听器的元素设置一个匿名类。

btn.addActionListener(new ActionListener()...);

问:这些方法的优点和缺点是什么?是否有性能优势,或者任何推荐一个而不是另一个的设计模式?或者任何其他好处?

我可以看到:

  1. 第一种方法是清洁

注意:我看到一个关于嵌套类vs实现ActionListener的问题;但大多数答案似乎给出了患者使用的方法,而不是每种方法的优缺点。

共有1个答案

杨凯旋
2023-03-14

如果你想让你的侦听器更容易访问(API可用),那么我会推荐方法2。我也在几年前停止使用私有类,使用公共静态嵌套类:

public class YourClass {

    public static YourNestedClass {
        //...
    }

}

除了您自己的实现之外,它们的初始化没有真正的性能差异。例如,如果你为一个公共对象(如方法1/2)可以完成的事情创建了30个不同的侦听器对象,那么可能会有轻微的差异。否则,你真的可以随心所欲。

 类似资料:
  • 本文向大家介绍java-RGB调色面板的实现(事件监听器之匿名内部类),包括了java-RGB调色面板的实现(事件监听器之匿名内部类)的使用技巧和注意事项,需要的朋友参考一下 题目要求: 要求写一个案例,使用三个JSlider分别选取R、G、B三原色的值,用户可以通过活动JSlider的滑块来动态的合成一种颜色,合成的颜色显示在界面上。 代码思路解析: 1、所需要的组件  (1)JFrame窗口

  • 问题内容: 这两个内部类声明之间有什么区别?还评论优点/缺点吗? 案例A:班级内的班级。 案例B:接口内的类。 进行了更正:放置getvalue方法。 进一步的信息:我能够在没有实现AT AT ALL接口的另一个类中实例化A和B的Items类。 由于未实例化接口,因此不通过实例化LEVELS接口就可以通过点表示法来访问接口内的所有元素,这仅仅是因为您无法实例化接口- 有效地使接口内定义的类可渗透静

  • 问题内容: 我已经阅读了“ C#匿名实现接口(或抽象类) ”线程以匿名实现接口。但是我想知道使用委托或任何类似方法的.NET 2.0(NO LINQ)是否也可能实现 我从JAVA知道以下可能: (我希望我还记得,是一段时间以前我使用JAVA,但我想它是类似的东西)。每当方法需要接口的实例并且仅被调用一次时,这可能会有所帮助,因此无需为此单一方法创建新的类。 问题答案: .NET 2.0还支持匿名委

  • 问题内容: 因此,当研究lambda表达式并用它们代替Java中的EventHandlers的匿名内部类时,我遇到了一些匿名内部类,这些使我停下来思考。例如,当为通常实现ActionListener的东西编写匿名内部类时,我们会编写 我对此感到困惑,因为ActionListener是一个接口,所以我认为有必要做类似的事情… 但这甚至无法编译。我想我这样做的原因显然是如果我们使用私有内部类,而使用

  • 问题内容: 在进行一些基本的lambda练习时,一个看似完全相同的匿名内部类的输出给我的输出与lambda不同。 场景1 输出 2 和 2 。这里没有新内容。 但是当我这样做时: 场景2 输出 2 和 3 问题:两个输出不应该相同吗? 我想念什么吗? 为了完整起见: 方案3 输出 3 和 3 。这里也没有什么新鲜的。 更新:仍从1.8.0-b132获得相同的输出 更新#2:错误报告: https

  • 问题内容: 据我所知,我们无法实例化接口,那么这是怎么发生的呢? 问题答案: 您无法实例化接口,但是可以为实现该接口的类的对象提供接口的引用,因此在代码中,您正在实现接口并创建该类的对象并提供该类的引用。