假设我有:
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(HandleEvent),因此事件(E)不会编译。对此有解决方案吗?或者我必须问它是什么类型的事件?
发布于 2012-12-16 22:04:56
通常的习惯用法是传递一个事件,然后让多态性为您处理所有这些事情。
如果没有任何行为,我在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。
https://stackoverflow.com/questions/13902043
复制相似问题