2013-07-05 24 views
2

我正在用Java編寫一個事件系統,並且在編寫Listener部分時遇到了一個問題。在Java中可能有無限數量的類型參數嗎?

這是我目前Listener類:

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

我要保持它的可擴展的,我可以有一個監聽器類,可靈活的任何事件類型,即Listener<Foo>Listener<Bar>而不是FooListener方式和BarListener,但我也希望實現類能夠收聽多個事件。

我的問題是,一個類不能有兩個不同類型的參數,可以實現監聽器類。

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 
} 
+0

Definitly沒有。在現實世界中一切都是有限的;) - 可變參數是通過數組實現的,所以參數的最大數目是'Integer.MAX_VALUE' –

回答

4

的問題是Listener<Foo>Listener<Bar>真的是完全一樣的界面,由於通用type erasure。所以這是不可能的(AFAIK)。

0

我不完全理解仿製藥,但我發現他們往往讓Java,靜態類型語言,多了很多靜態的。這可能是件好事。但是你試圖做的是相當有活力的。

所以在這種情況下,我會轉儲泛型。讓Foo和Bar擴展或實現事件。 (沒有「<>」的事件)確保Event類具有足夠的方法,以使Listener的handleEvent()中的代碼不需要多個if的使用instanceof;所以它只能處理普通的Event對象。 (介意,偶爾instanceof不會損害任何東西,通常是。)

相關問題