假设我有一个像这样的标记界面:
public interface Widget { };
以及该界面的各种实现:
public class AWidget implements Widget {
....
public String getSomeAttribute() { return ...; }
}
public class AnotherWidget implements Widget {
....
public String getAnotherAttribute() { return ...; }
}
进一步假设我有一些代码可以创建List
并尝试处理它们:
List<? extends Widget> widgets = someMethodToCreateWidgets();
类似下面的内容可能在一个类中循环并处理小部件
for(Widget widget : widgets) {
anotherClass.process(widget);
}
和anotherClass
有如下方法签名?
public class AnotherClass {
public void process(AWidget widget) {
....
widget.getSomeAttribute();
....
}
public void process(AnotherWidget widget) {
....
widget.getAnotherAttribute();
....
}
}
我觉得我之前在概念中看到了类似于此的实现,但我正在努力获得类似的工作。最终,我试图避免一个必须有一堆
的process()
方法
if ( widget instanceof AWidget ) {
...
}
else if ( widget instanceof AnotherWidget ) {
...
}
答案 0 :(得分:1)
如果我理解正确,你正在寻找一种叫做“双重调度”的东西。访客模式是处理此问题的一种常用方式:http://en.wikipedia.org/wiki/Visitor_pattern