2013-06-20 122 views
0

有人可以請向我解釋爲什麼這會導致運行時異常?在我看來,我正在訪問類型變量B的數組列表。泛型運行時異常

class A {} 
class B extends A {} 
List<B> bL = new ArrayList<B>(); 
List<A> aL = bL; 
aL.add(new A()); 
B b = bL.get(0); // runtime exception 

回答

2

您應該無法成功編譯您的代碼。你應該在這條線得到一個編譯器錯誤:

List<A> aL = bL; 

因爲List<Subclass>不是List<Superclass>。這是因爲你剛纔的嘗試而被禁止的 - 將超類實例插入到子類實例列表中。