11
我想提供這樣的事情在我的API:嵌套泛型泛型類
class Foobar extends AbstractThing<Double>
class EventThing<Foobar> {
public Foobar getSource();
public Double getValue();
}
所以我寫這篇文章:
class EventThing<T extends AbstractThing<U>> {
public T getSource();
public U getValue();
}
但Java無法解決U
。
使用EventThing<T extends AbstractThing<U>,U>
代替它可以工作,但第二個U
實際上是多餘的,因爲AbtractThing已經定義了類型。所以我喜歡擺脫它。
在我看來,更像是編譯器的功能缺失。 編輯: 但我明白你的意思,謝謝你的回答。 要壞。我想我會離開這個洞的功能。 – 2010-12-15 16:31:32
@Marcel:我認爲這個答案很清楚地解釋了爲什麼編譯器不能(也不應該)試圖猜測'U'是一個實際類型還是一個泛型類型參數。 Java要求每個泛型類型參數都有明確的聲明。不管你看起來如何,這不是「編譯器缺少的功能」。 – ColinD 2010-12-15 17:10:06
@ColinD:我同意Marcel的看法,它確實看起來像是一個缺失的特徵,在他的例子中U看起來多餘。顯然,編譯器必須被告知U是一個類型參數,我們可以有這樣的類:class EventThing>,本質上是說:U是一個變量類型參數,現在自己去推斷它(使用字符%僅供討論之用,我同意這很醜陋)。這樣在調用代碼中就不會有重複。 –
Gilead
2012-11-28 11:48:39