Java中可能有无限数量的类型参数吗?

时间:2013-07-05 21:05:14

标签: java events event-handling type-parameter

我正在用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

2 个答案:

答案 0 :(得分:4)

由于通用type erasure,问题是Listener<Foo>Listener<Bar>实际上是完全相同的界面。所以这是不可能的(AFAIK)。

答案 1 :(得分:0)

我不完全理解泛型,但我发现他们倾向于使Java,一种静态类型的语言,更加静态。这可能是一件好事。但你要做的是相当有活力。

所以在这种情况下我会抛弃泛型。让Foo和Bar扩展或实现Event。 (没有“&lt;&gt;”的事件。)确保Event类有足够的方法使得Listener的handleEvent()中的代码不需要使用if多个instanceof;所以它只能处理普通的Event对象。 (记住,偶尔instanceof不会伤害任何东西,通常。)