当我输入以下代码时:
JButton aButton = new JButton("Button");
aButtin.addActionListener(this);
我的IDE(NetBeans)强调这是一个泄漏的声明。 虽然使用语句似乎从来没有任何负面影响,但我读过的一些文档表明,更合适的方法是将动作侦听器添加为实现ActionListener的内部类的新实例。 NetBeans和这些文档知道我不知道什么? 漏掉这个陈述的真正含义是什么? 我是否会以这种方式使用这种方式而产生负面影响?
答案 0 :(得分:4)
有三种方式
aButton.addActionListener(this);
并且implements ActionListener
也,则public void actionPerformed(ActionEvent ae) {
f.i。伪代码
public class ButtonDemo implements ActionListener{
aButton.addActionListener(this);
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == aButton) {
}
}
}
aButton.addActionListener(new ButtonPress());
是ActionLIstener被声明为单独的类f.i。伪代码
public class ButtonDemo {
aButton.addActionListener(new ButtonPress());
}
public class ButtonPress implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
}
}
f.i。伪代码
aButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
答案 1 :(得分:2)
如果使用this
,那么为了使this
能够处理来自多个源的ActionEvent,您需要添加逻辑来检查操作的源或命令字符串。这非常合理。
如果您使用其他类,则可以使用在其他地方实现的ActionListener,或者重用为特定目的而设计的ActionListener,或者定义例如匿名内联类内联,在您的情况下可能很方便。这也是完全合理的。
不要考虑“优势”或“劣势” - 这是一个常见的错误(做xyz是“坏”吗?xyz是“良好做法”吗?)。您可以使用对您的情况最有意义的任何内容,并提供最清晰,最易维护,功能正常的代码。有常识,熟悉你正在使用的语言和可用的选项,做出明智的判断。语言是表达想法,清楚地说出(打字)的一种方式。
答案 2 :(得分:1)
我猜使用内部类实现的一个缺点是,侦听器不能重用于其他按钮,以防它们应该具有相同的侦听器。 像这样: