我有這樣的代碼爲什麼這個泛型代碼沒有運行時錯誤?
ArrayList<Integer>arr = new ArrayList<>();
arr.add(1);
arr.add(2);
List l = arr;
l.add("12");// should't this throw an runtime exception? Point1
l.add("123");
System.out.println(l.size());
ArrayList<String>arr1 =(ArrayList<String>) l;// should't this throw an runtime execptions? Point2
arr1.add("12"); //Point 3
System.out.println(arr1.size());
我與泛型代碼嘗試,我很驚訝地看到一些結果。我有這個具體的問題。
我有一個integer列表。我將它分配給一個沒有任何泛型類型的列表l。然後我將一個字符串添加到該列表中。不應該拋出一個運行時異常?列表仍然是一個整數列表嗎?
然後我把l投到串列表中?不應該這也拋出一個運行時異常?我不是有效地將integer的數組列表轉換爲字符串的字符串列表嗎?
而在這種情況下,點3,我將一個字符串添加到arr1,即使它應該是字符串arraylist?
我覺得所有三個被質疑的都是相關的嗎?任何人都可以向我解釋我做錯了什麼?
因此預計不會發生運行時異常? – Dude 2014-09-22 16:31:37
正確 - 在同一個集合中存儲異構類型是合法的(但通常不鼓勵)。爲了有用地處理列表,你需要使用'instanceof'或者編碼特定元素的類型。 – FatalError 2014-09-22 16:32:09