[英]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>
而不是FooListener
和BarListener
,但我也希望实现类能够听多个事件。
我的问题是,一个类无法使用两个不同的类型参数来实现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.