所以我偶然发现了几种实现ActionListener的方法,我想知道是否有人可以告诉我每种方法的不同之处以及是否有理由或优势来使用其中一种方法?
第一个是下面的代码块:
public void actionPerformed(ActionEvent arg0) {
// CODE HERE
}
我看到的第二种方式是在另一段代码中:
private class myListener implements ActionListener {
// CODE HERE
}
第三个是ActionListener的一个单独的类,它具有与上面类似的代码,但是在一个单独的类中。
我想知道方法方法是否更有效,因为不必为每个方法创建新对象,只需将this
引用为ActionListener,而不是引用new myListener()
。谢谢。
答案 0 :(得分:6)
任何选项的速度都没有区别;你总会有一个实现ActionListener接口的对象。避免单独类的实例只会节省几个字节的内存。
您的选择应该基于对您的代码有意义的结构。例如,让你的公共类实现ActionListener对于那些使用该类的人来说可能看起来很奇怪,特别是如果ActionListener行为应该是类的私有而不是在它之外使用。
所以它主要是你认为代码看起来更好的选择;关于字段/方法访问唯一真正的区别(例如,一个单独的非内部类将无法访问您的类的私有方法和字段,匿名内部类无法访问该类的非最终变量封闭方法等。)
答案 1 :(得分:2)
我不喜欢或使用“实现ActionListener”。
我喜欢并使用匿名内部类,如:
btnPurplescreen.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Color baseColor = Color.BLUE;
panelImage.setBackground(baseColor);
panelReference.setBackground(baseColor);
panelReference2.setBackground(baseColor);
baseType = BaseType.PURPLE;
}
});
答案 2 :(得分:1)
你有更多的绊脚石。
从某种意义上说,只有一种方法可以创建一个监听器:必须有一个实现ActionListener
的类的对象,这意味着该类具有actionPerformed
方法。
有三种方法可以做到这一点:
您可以通过将其标记为实施ActionListener
并添加actionPerformed
方法来修改已用于其他内容的类。这可以节省您创建一个新类 - 在大多数情况下可以节省可忽略的价值 - 但是火星可以提供非常好的代码。少数情况下,现有的
您可以创建一个名为的新类。如果您认为该名称对某人有意义,这将非常有用。如果你真的使用像“MyListener”这样的名字,那就是没有人知道这个名字。
最后,通常,您可以创建一个未命名的类。如果您只想添加一段代码作为监听器。
无论您的选择是什么,极都不会对完成的系统的时间或内存性能产生任何可察觉的影响。选择应该由对可读性和可维护性的关注决定。