public class Array<T> {
private Object[] array;
public Array(int sz) {
array = new Object[sz];
}
// ....
public T get(int index) { return (T)array[index]; }
public T[] rep() { return (T[])array; }
}
为什么编译器说(T[])array
未经检查强制转换,然后在使用ClassCastException
方法时抛出rep()
?
当我使用get()
方法()时,为什么不抛出此异常?
答案 0 :(得分:1)
在get()
中,您只关心数组中元素的实际运行时类型,我认为这是正确的,因为您有一些方法只将T
放入数组中。数组的实际运行时类型并不重要。
在rep()
中,您关心数组对象的实际运行时类型,因为您将其转换为T[]
。您使用实际运行时类型Object[]
创建了数组,因此除非T[]
恰好是T
,否则转换为Object
始终不正确。