创建实现ActionListener的嵌套类是否有任何好处或缺点:
public class Foo{
Foo(){
something.addActionListener(new ButtonListener());
}
//...
private class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e){
//...
}
}
}
在主类本身中实现ActionListener:
public class Foo implements ActionListener{
Foo(){
something.addActionListener(this);
}
//...
public void actionPerformed(ActionEvent e){
//...
}
}
我经常看到这两个例子,只是想知道是否有'最佳实践'。
答案 0 :(得分:10)
答案 1 :(得分:5)
我认为第一种方法更好,因为您的类将有一个单独的代码来处理操作。并且通常组合也比继承更好,所以一个类应该扩展一个类或实现一个接口,只要它真的是一个超类型。
同样为了可维护性,让我们说Foo类有一个新的要求,即侦听另一种不同类型的事件,然后执行操作,在这种情况下,也可以轻松修改第一类。
如果我不担心可维护性,我宁愿选择匿名课程。
答案 2 :(得分:3)
如果Foo类没有其他责任而不是封装这个按钮,那么第一个解决方案就没问题了。
然而,只要Foo得到更多的“事情”,它必须听,然后就会变得混乱。我更喜欢第二种解决方案,因为它更明确,并且具有更好的可扩展性。
更好的解决方案可能是创建一个不合理的内部类。
public class Foo{
Foo(){
something.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
//...
}
});
}
}
答案 3 :(得分:3)
通常,您希望使用嵌套甚至匿名类,而不是将ActionListener暴露给封闭类的API。 (公共类Foo实现ActionListener - > Javadoc将声明Foo是一个ActionListener,虽然这通常只是一个实现细节 - >坏)