Java的泛型強制轉換中,下面例子為什麼只能有super

時間 2021-05-06 17:41:02

1樓:先生

R大其實說的相當清楚了。因為我也被這個問題困惑過一段時間。

進一步結合題主的問題,舉個例子解釋說明下:

首先有這樣乙個方法

public List produceFruit

呼叫這個方法:

List<? super Fruit> collection=fruitStore.produceFruit();

上訴方法在呼叫的時候把super換成extends就會報錯了,為何會不通過呢。

題主可以這麼考慮,。想象你拿著籃子(collection)去水果店買水果,讓店員拿了一堆水果全部放籃子裡面(fruitStore.produceFruit())。

回家之後,你想給籃子貼個標籤(泛型)。那麼時應該貼乙個什麼?你會發現這個標籤必須至少要從水果往上算才可以。

就是說可以是食物,可以是吃的,但是絕對不會是某一種水果。

同理題主的例子中

Comparable<? super T> e = (Comparable<? super T>)elemet

如果允許extends的話,就是說e可以是T的任一子類。但是你壓根沒法保證element的型別和你宣告的e的型別時同乙個東西。但是使用super的法,可以保證e的型別絕對時包含element的型別的。

關於java中物件和泛型的乙個小問題?

第二個問題,第一種情況是因為String是Object的子類,所以可以。第二種,你new出來的list1是Object集合,說明裡面可以放任何型別,要是能等於String集合,不就只能放String 了麼,所以報錯了。第乙個不了解,應該是乙個吧。下班路上手機打字應該不嚴謹,一會更新 1 就new O...

C 中如何通過反射序列化泛型field?

題主沒有說清楚自己用反射序列化字典的應用場景啊,看題主的esle if我猜你是想傳入乙個object然後通過判斷object的型別來自動序列化? 趙劼 操作具體型別Dictionary的話,那麼直接用IDictionary介面就行。我這裡假設你要操作IDictionary。總而言之就是 物件導向學了...

為什麼在C 中泛型型別不能是Explicit Layout的?

這個LayoutKind列舉的 Explicit 的值,文件是這樣定義的 在未管理記憶體中的每乙個物件成員的精確位置是被顯式控制的,服從於Pack欄位的設定。每個成員必須使用FieldOffsetAttribute指示該字段在型別中的位置。就是,成員必須有FieldOffsetAttribute去顯...