簡體   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