假设我有:
class Event {}
class DoorBell extends Event {}
class PhoneCall extends Event {}
class EventGenerator {
static Event getEvent() {
if (today.isSunday())
return new DoorBell()
else
return new PhoneCall();
}
}
class EventHandler {
void HandleEvent(DoorBell doorBell) { answer door; }
void HandleEvent(PhoneCall phoneCall) { answer phone; }
void consumeEvent() {
Event e = EventGenerator.getEvent();
HandleEvent(e);
}
}
由于HandleEvent(Event)未定义,因此HandleEvent(e)无法编译。这有解决方案吗?或者我必须询问它是什么类型的事件?
答案 0 :(得分:4)
通常的习惯用法是传递一个事件,让多态来处理它。
我认为你EventHandler
班没有任何行为没有价值。您所设计的设计不会带来多态效益。这就是你必须检查类型的原因。最好有这样的东西:
public interface EventHandler {
void handle(Event event);
}
Visitor pattern(又名“双重调度”)可能是处理这种情况的好方法。
或者你可以试试泛型:
public class EventHandler {
public <T> void consumeEvent(T event) {
// handler code here, dependent on T
}
}
我不知道JDK 7是否有新功能可以帮到你。抱歉;我仍然坚持使用JDK 6.