[英]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.