Java數據泛型正確的初始化方法

如果單單使用

T[] array;
array = (T[]) new Object[10];
T[] rep() {
    return array;
}

Object[] array;
array = new Object[10];
T[] rep() {
    return (T[])array;     
}

那麼當外部使用類調用 GenericArray[] rep = c.rep();時,
由於Java的類型擦除,運行期將出錯,因爲返回值數組類型爲Object[]。

正確的方法如下所示:

public class GenericArrayWithTypeToken<T> {
    private T[] array;

    public GenericArrayWithTypeToken(Class<T> type,int sz) {
       array = (T[]) Array.newInstance(type,sz);
    }

    public void put(int index,T item) {
        array[index] = item;
    }

    public T get(int index) {
        return array[index];
    }

    public T[] rep() {
        return array;
    }


    public static void main(String[] args) {
        GenericArrayWithTypeToken<Integer> array = new GenericArrayWithTypeToken<Integer>(Integer.class,100);
        //this is worked
        Integer[] rep = array.rep();
    }


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章