我正在尝试为我遇到的问题创建一个体面的解决方案。我可以用文字解释,但代码会更清楚:
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(ClassA.getButtonOne()) ||
e.getSource().equals(ClassB.getButtonOne())) {
???????.setEnabled(false); (class a or class b)
}
说明:如何将e.getSource()更改为正确的类类型,以便我可以对其执行方法?一个额外的细节:我确信if语句中的所有方法都拥有我想要执行的方法,在上面的'setEnabled'示例中。我可以通过创建多个if语句来解决问题,但这会产生重复的代码(特别是因为将来还会有一个C和D类)。
答案 0 :(得分:3)
如果您需要使用相同的侦听器,则该要求看起来像visitor或double-dispatch模式。您应该重定向回源类,例如
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source instanceof MySource) {
((MySource)source).executeOnEvent(e, this);
}
....
通过这种方式,您不必实现大量的“if”(如您所识别的那样容易出错且冗长)。您只需在收到事件时检查对象类型,并在适当时回调它。请注意,我在上面回调了事件和接收事件的对象。但是,您可以选择哪些参数是重要/相关的。
答案 1 :(得分:1)
为每个可能的来源使用不同的侦听器实例,并完全避免此问题。