我怎么能初始化通用数组

时间:2012-07-09 22:25:25

标签: java arrays generics

我已经获得了一个实现类“Set”的骨架类“OrderSet”,其中一个变量T []项是通用的,我想把它初始化为一个包含5个元素的数组,但是在做了一些之后阅读,我了解到你无法初始化通用数组,如果是这样的话我怎么能初始化数组呢?

这是班级

public class OrderSet<T extends Comparable> implements Set<T> {

    private T[] items;
    private int theSize;

    public OrderSet()
    {
        items = (T[]) new Set[5];
    }

    @Override
    public void add(T s)
    {

    }

    @Override
    public void show()
    {

    }

}

1 个答案:

答案 0 :(得分:8)

您可以使用类似T[] items=(T[])new Object[size];之类的内容,但它会创建对象数组,以便您可以通过原始类型引用插入任何对象。你有一些T类型或类文字的实例会很好,然后你可以使用它来创建T类型的正常数组,例如像这样。

public static <T> T[] createArray(Class<T> type, int size){
    return (T[])Array.newInstance(type, size);
}


编辑 - 如何将所有类型的对象放入用于存储泛型类型数据的Object []数组的示例之一

class GenericArrayTest<T>{
    T[] array1; // this array will be created by (T[])new Object[size];
    Object[] array2; // this will be created by new Object[size]
    T[] array3; // and this as (T[])Array.newInstance(type, size);

    GenericArrayTest(Class<T> type, int size){
        array1=(T[])new Object[size];
        array2=new Object[size];
        array3=(T[])Array.newInstance(type, size);
    }

    void put1(T data, int index){ array1[index]=data; }
    void put2(T data, int index){ array2[index]=data; }
    void put3(T data, int index){ array3[index]=data; }

    T get1(int index){ return array1[index]; }
    T get2(int index){ return (T)array2[index]; }
    T get3(int index){ return array3[index]; }

    void showArraysRow(int index){
        System.out.println(get1(index)+" "+get2(index)+" "+get3(index));
    }

    //TEST
    public static void main(String[] args) {
        //we will put
        GenericArrayTest<Integer> k=new GenericArrayTest<Integer>(Integer.class,10);
        k.put1(123, 0);
        k.put2(123, 0);
        k.put3(123, 0);

        k.showArraysRow(0);

        //I CREATE RAW TYPE REFERENCE - no generic control anymore
        GenericArrayTest k2=k;
        k2.put1("data1", 0);
        k2.put2("data2", 0);
//      k2.put3("data3", 0);//<- this would throw ArrayStoreException - wrong data type

        k2.showArraysRow(0);
    }
}

出:

123 123 123
data1 data2 123