我正在设计一个事件驱动的系统,并遇到一些关于泛型的基本API问题。使用不同的泛型类型实现同一个泛型Java接口的多个实例?
我woud喜欢所有的活动延长BaseEvent
:
// Groovy pseudo-code
abstract BaseEvent {
Date occurredOn
BaseEvent() {
super()
this.occurredOn = new Date() // Now
}
}
而且我想所有事件侦听器来实现一些基础接口:
interface EventListener<EVENT extends BaseEvent> {
void onEvent(EVENT event)
}
所以这伟大工程,简单的听众,只处理单一类型的事件:
class FizzEvent extends BaseEvent { ... }
class FizzEventListener implements EventListener<FizzEvent> {
@Override
void onEvent(FizzEvent fizzEvent) {
...
}
}
但我会一些听众需要处理事件的多种类型:
class BuzzEvent extends BaseEvent { ... }
// So then, ideally:
class ComplexListener implements EventListener<FizzEvent>,
EventListener<BuzzEvent> {
@Override
void onEvent(FizzEvent fizzEvent) {
...
}
@Override
void onEvent(BuzzEvent buzzEvent) {
...
}
}
但是,这会产生编译器错误:
名称冲突:类型为EventListener的方法的onEvent(事件)有相同的擦除为的onEvent(EVENT )的类型EventListener但不覆盖它
任何想法是什么解决方案是处理多个事件?