我正在爲SCJP/OCPJP學習,並且遇到了一個接近我的奇怪問題。實例化類型的泛型類<?>
示例代碼實例化兩個通用的集合:
List<?> list = new ArrayList<?>();
List<? extends Object> list2 = new ArrayList<? extends Object>();
的「正確」答案的問題是,這個代碼將編譯,但加入要麼集合將產生一個運行時錯誤。
當我嘗試編譯這樣的代碼時,我只是得到錯誤。 Java教程甚至沒有顯示這種類型的代碼,它通常使用通配符作爲upcast的一部分。
Collection<?> c = new ArrayList<String>();
上面即使是合法的代碼,這兩個泛型集合?第二個由我的邏輯只會禁止接口。第一個看起來完全沒用。爲什麼要使用一種通用的方法來控制?
看不到這會編譯和你可以添加到兩個集合就好 - 只是只有一個對象。我把它作爲練習讓讀者弄清楚每個班級哪個對象是有效的:) – Voo 2011-12-30 19:26:56
你也不能這樣做。我想知道問題/答案是否是錯誤的,而且顯然是這樣。 – jeremyjjbrown 2011-12-30 20:18:25
剛剛投票因爲什麼原因? – jeremyjjbrown 2014-03-01 18:52:26