3 回答

TA貢獻1829條經驗 獲得超9個贊
為什么我不能投射 a?
List<List<Object>>
to?List<Object>
?不是List<Object>
也Object
嗎?
因為Java 泛型不是隱式多態的。。List<Object>
意味著它可以Object
在給定列表中包含任何內容,甚至是 a?Map<?, ?>
,但是當您將其轉換為 a 時List<List>
,包含任何內容不再有意義Object
,并且僅限于List
使用時效果如何
Collections.singletonList()
?
僅僅是因為按照文檔Collections.singletonList()
返回 a?,所以編譯器不會在運行時抱怨它。

TA貢獻1805條經驗 獲得超9個贊
答案的兩部分:?List<Object>
是不變的,因此鍵入的表達式List<List<? extends java.lanq.Object>>
不能分配給List<Object>
?Google 以獲取 Java 中的方差,例如:?DZone 關于 Java 中方差的文章
public static <T> List<T> singletonList(T o)
是一個通用方法。對于泛型方法,應用類型推斷。在您的上下文中,T 應該是一個對象,并且List<List<? extends java.lanq.Object>>
可以轉換為對象。

TA貢獻1793條經驗 獲得超6個贊
您應該看看 Java 中的類型擦除和原始類型。
列表使用泛型,因此當您嘗試使用定義原始類型創建列表時,它會使用Object
List list;
// means that list holds Objects
List<String> listOfStrings;
// means that list holds Strings
現在的情況是List<List>
列表是一個interface沒有合適的轉換的對象,因為Object在評估此語句時,JVM 會注意到您嘗試使用既不是對象也不是“它的子對象”的項目
List<List<? extends java.lanq.Object>> // (Object or children of it)
添加回答
舉報