繁体   English   中英

Java中是否可能有不确定数量的类型参数?

[英]Is it possible to have an indefinite number of type parameters in Java?

我正在用Java开发事件系统,在编写侦听器部分时遇到了问题。

这是我当前的Listener类:

public interface Listener<E extends Event<?>> {
    public void handleEvent(E event);
}

我想让它保持可扩展性,以便我可以拥有一个对任何事件类型都可以灵活使用的侦听器类,即Listener<Foo>Listener<Bar>而不是FooListenerBarListener ,但我也希望实现类能够听多个事件。

我的问题是,一个类无法使用两个不同的类型参数来实现Listener类。

public class MultiListener implements Listener<Foo>, Listener<Bar> {
    // does not work
}

我知道一种方法可能具有不确定数量的参数,如下所示:

public void toInfinityAndBeyond(String... lotsOfStrings) {

}

但是我的Listener类是否可以具有无限数量的类型参数来侦听多个事件?

public class MultiListener implements Listener<ThisEvent, ThatEvent, AnotherEvent> {
    // hypothetical
}

问题在于,由于泛型类型擦除Listener<Foo>Listener<Bar>实际上是完全相同的接口。 因此,这是不可能的(AFAIK)。

我不完全理解泛型,但是我发现它们倾向于使Java(一种静态类型的语言)更加静态。 这可能是一件好事。 但是您想要做的是相当动态的。

因此,在这种情况下,我将转储泛型。 使Foo和Bar扩展或实现Event。 (事件没有“<>”),确保事件类有足够的方法是,在监听器的handleEvent()的代码并不需要多if的使用instanceof ; 因此它只能处理简单的Event对象。 (请注意,偶尔的instanceof不会伤害任何东西。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM