我正在用Java创建一个事件系统,我在编写Listener部分时遇到了一个问题。
这是我目前的Listener
课程:
public interface Listener<E extends Event<?>> {
public void handleEvent(E event);
}
我想保持它可扩展的方式,我可以拥有一个可以灵活适应任何事件类型的Listener类,即Listener<Foo>
和Listener<Bar>
而不是FooListener
和{{ 1}},但我也希望实现类能够监听多个事件。
我的问题是类不能用两个不同的类型参数实现Listener类。
BarListener
我知道方法可能有无限数量的参数,如下所示:
public class MultiListener implements Listener<Foo>, Listener<Bar> {
// does not work
}
但是我的public void toInfinityAndBeyond(String... lotsOfStrings) {
}
类可以有无限数量的类型参数来监听多个事件吗?
Listener
答案 0 :(得分:4)
由于通用type erasure,问题是Listener<Foo>
和Listener<Bar>
实际上是完全相同的界面。所以这是不可能的(AFAIK)。
答案 1 :(得分:0)
我不完全理解泛型,但我发现他们倾向于使Java,一种静态类型的语言,更加静态。这可能是一件好事。但你要做的是相当有活力。
所以在这种情况下我会抛弃泛型。让Foo和Bar扩展或实现Event。 (没有“&lt;&gt;”的事件。)确保Event类有足够的方法使得Listener的handleEvent()中的代码不需要使用if
多个instanceof
;所以它只能处理普通的Event对象。 (记住,偶尔instanceof
不会伤害任何东西,通常。)