通用数组和通用值之间有什么区别?

时间:2016-08-15 14:24:11

标签: java arrays generics casting

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()方法()时,为什么不抛出此异常?

1 个答案:

答案 0 :(得分:1)

get()中,您只关心数组中元素的实际运行时类型,我认为这是正确的,因为您有一些方法只将T放入数组中。数组的实际运行时类型并不重要。

rep()中,您关心数组对象的实际运行时类型,因为您将其转换为T[]。您使用实际运行时类型Object[]创建了数组,因此除非T[]恰好是T,否则转换为Object始终不正确。