public class Box<T> {
private T element;
public T getElement() {
return element;
}
public void setElement(T element) {
this.element = element;
}
}
public class Test {
public static void main(String[] args) {
List<Box> l = new ArrayList<>(); //Just List of Box with no specific type
Box<String> box1 = new Box<>();
box1.setElement("aa");
Box<Integer> box2 = new Box<>();
box2.setElement(10);
l.add(box1);
l.add(box2);
//Case 1
Box<Integer> b1 = l.get(0);
System.out.println(b1.getElement()); //why no error
//Case 2
Box<String> b2 = l.get(1);
System.out.println(b2.getElement()); //throws ClassCastException
}
}
列表l
包含Box
類型的元素。在情況1中,我得到第一個元素爲Box<Integer>
,第二種情況下,列表中的第二個元素爲Box<String>
。 ClassCastException在第一種情況下不引發。Java - 以字符串形式獲取泛型對象泛型類型拋出異常
當我試圖調試時,element's
類型b1
和b2
分別String
和Integer
。
它與類型擦除有關嗎?
我的猜測是'b1'在運行時被認爲是'Box