标签:string 返回值 log put turn lis code arraylist return
public class ArrayOfGeneric{
    static Generic<Integer>[] gia;
    @SupperssWarnings("unchecked")
    public static void main(String[] args){
        gia = (Generic<Integer>[])new Generic[100]; // 通过类型转换匿名对象
        //! gia[0] = new Object(); //编译不通过,不能(直接)创建泛型数组实例
    }
}
public class GenericArray<T> {
    private T[] array;
    @SupperessWarning("unchecked")
    public GenericArray(int sz) {
        array = (T[]) new Object[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){
        GenericArray<Integer> gai = new GenericArray<Integer>(10);
        // Integer[] ia = gai.rep(); //ClassCastException
        Object[] oa = gai.rep(); //只能返回对象数组类型为Object[]
public class GenericArray2<T> {
    private Object[] array;  //维护Object[]类型数组
    @SupperessWarning("unchecked")
    public GenericArray2(int sz) {
        array = new Object[sz];
    }
    public void put(int index, T item) {
        array[index] = item;
    }
    public T get(int index) { return (T)array[index]; }//数组对象出口强转
    public T[] rep() { return (T[])array; } //运行时无论怎样都是Object[]类型 
    public static void main (String[] args){
        GenericArray<Integer> gai = new GenericArray<Integer>(10);
        // Integer[] ia = gai.rep(); //依旧ClassCastException
        Object[] oa = gai.rep(); //只能返回对象数组类型为Object[]
        gai.put(0,11);
        System.out.println(gai.get(0)); // 11 ,出口成功转型
    }
}
import java.lang.reflect.*; 
public class GenericArrayWithTypeToken<T> {
    private T[] array;
    @SuppressWarning("unchecked")
    public GenericArrayWithTypeToken(Class<T> type, int sz) {
        array = (T[]) Array.newInstance(type, sz);//通过反射在运行时构出实际类型为type[]的对象数组,避免了类型擦除,从而转换成功,无ClassCastException
    }
    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> gawtt = new GenericArrayWithTypeToken<>(Integer.class, 10);
        Integer[] ia = gawtt.rep(); //能成功返回了!
    }
}
标签:string 返回值 log put turn lis code arraylist return
原文地址:http://www.cnblogs.com/ilinuxer/p/7147941.html