所以,我明白那以下不起作用,但是爲什麼不起作用?爲什麼我不能在具有多個邊界的類型參數中使用類型參數?
interface Adapter<E> {}
class Adaptulator<I> {
<E, A extends I & Adapter<E>> void add(Class<E> extl, Class<A> intl) {
addAdapterFactory(new AdapterFactory<E, A>(extl, intl));
}
}
的add()
方法給我一個編譯錯誤,「不能指定任何附加綁定適配器<Ë>當第一結合是一種類型的參數」(在Eclipse),或「類型參數不能被隨後的其他邊界」 (在IDEA中),請選擇。
顯然你只是不允許使用類型參數I
那裏,在&
之前,就是這樣。 (並且在你問之前,如果你切換他們,它是行不通的,因爲不能保證I
不是一個具體的類。)但是爲什麼不呢?我瀏覽了Angelika Langer的常見問題,無法找到答案。
通常,當某些泛型限制看起來是任意的時,這是因爲您已經創建了類型系統實際上不能實施正確性的情況。但我不明白什麼情況會打破我在這裏要做的事情。我想說也許它與類型擦除後方法調度有關,但只有一個方法add()
,所以它不像有任何歧義...
有人可以證明我的問題嗎?
實際上,如果多個邊界點是要控制擦除,那完全有意義,因爲我只是要擦除Object。 – 2008-10-13 13:11:46