2013-03-15 95 views
0

非泛型方法我有一些非泛型方法重載的特定對象 EX:調用從泛型方法

protected boolean internalAdd(IP4BlockObject block) {...} 
protected boolean internalAdd(IP4NetworkObject network) {...} 

我想寫像

protected <T extends AbstractEntityObject>boolean internalAdd(T t) {} 

,並從這個方法方法我可以調用非泛型方法(不使用instanceof操作符;))

+2

你想做什麼?這個問題不是很清楚。 – benzonico 2013-03-15 12:16:30

+0

所以你想要一個通用的方法,神奇地瞭解要調用哪個特定的方法? – 2013-03-15 12:20:41

+0

我認爲,如果我正確地理解相當模糊的問題,答案是否定的。如果要處理所有可能傳入的對象,那麼如果只有一個處理程序適用於所有類型,那麼您的方法仍然必須知道它收到的類型。 – Sticks 2013-03-15 12:20:53

回答

1

不,這將是編譯時錯誤。

在類型的方法internalAdd(IP4BlockObject)不適用於參數(T)

因爲你的類型的方法:

protected boolean internalAdd(IP4BlockObject block) {...} 
protected boolean internalAdd(IP4NetworkObject network) {...} 

併爲protected <T extends AbstractEntityObject>boolean internalAdd(T t) {}你會得到t作爲T的類型。所以,如果你撥打:

internalAdd(t); 

這會給你編譯時錯誤,因爲internalAdd()只希望IP4BlockObjectIP4NetworkObject

注:如果所有這些方法是在同一個類則internalAdd(t);會打電話給你的再次泛型方法,所以你會落得死循環。

0

我想IP4BlockObjectIP4NetworkObject延伸AbstractEntityObject並且你想使用抽象引用在一些重載的方法之間分派? 我是這樣的,我不太明白使用泛型方法的目的。爲什麼你不這樣申明這種方法:

boolean internalAdd(AbstractEntityObject object) {} 

然後你需要爲給定的對象選擇所需的方法。沒有使用instance of運算符或者某種派生類的多態方法,例如,作爲enum

如果你想逃避這一點,你可以重寫代碼,並允許派生類自己選擇所需的方法,通過使用一些接口調用他們的多態方法。但它真的值得嗎?