泛型数组

1.直接使用T

public class GenericArray<T> {
    private T[] array;
    
    public GenericArray(int size){
        array = (T[]) new Object[size];
    }
    
    public void put(int index, T item){
        array[index] = item;
    }
    
    public T get(int index){
        return array[index];
    }
    
    public T[] toArray(){
        return array;
    }
    
    public static void main(String[] args) {
        GenericArray<Integer> gai = new GenericArray<Integer>(10);
        //Integer[] ia = gai.toArray();//运行时是Object类型, java.lang.ClassCastException
        Object[] oa = gai.toArray(); 
    }
}

2.在内部使用Object,取出时转为T。ArrayList就是这种实现

public class GenericArray1<T> {
    private Object[] array;
    
    public GenericArray1(int size){
        array = (T[]) new Object[size];
    }
    
    public void put(int index, T item){
        array[index] = item;
    }
    
    public T get(int index){
        return (T) array[index];
    }
    
    public T[] toArray(){
        return (T[]) array;
    }
    
    public static void main(String[] args) {
        GenericArray1<Integer> gai = new GenericArray1<Integer>(10);
        //Integer[] ia = gai.toArray();//运行时是Object类型, java.lang.ClassCastException
        Object[] oa = gai.toArray(); 
    }
}

3.使用类型标记

 1 public class GenericArrayWithTypeToken<T> {
 2     private T[] array;
 3     
 4     public GenericArrayWithTypeToken(Class<T> type ,int size){
 5         array = (T[]) Array.newInstance(type, size);
 6     }
 7     
 8     public void put(int index, T item){
 9         array[index] = item;
10     }
11     
12     public T get(int index){
13         return array[index];
14     }
15     
16     public T[] toArray(){
17         return  array;
18     }
19     
20 
21     
22     public static void main(String[] args) {
23         GenericArrayWithTypeToken<Integer> gai = new GenericArrayWithTypeToken<Integer>(Integer.class,10);
24         Integer[] ia = gai.toArray(); 
25 
26     }
27 }
原文地址:https://www.cnblogs.com/yuyutianxia/p/3836637.html