关于java:我如何初始化通用数组

how could I initialize a generic array

本问题已经有最佳答案,请猛点这里访问。

我得到了一个实现类"set"的骨架类"orderset",其中一个变量t[]项是泛型的,我假设将它初始化为一个由5个元素组成的数组,但是在进行了一些阅读之后,我了解到您不能初始化一个泛型数组,如果是这样的话,我如何初始化数组?

这是班级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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()
    {

    }

}


您可以使用类似于T[] items=(T[])new Object[size];的东西,但它将创建对象数组,这样您就可以通过原始类型引用在那里插入任何对象。如果您有一个T类型或类文本的实例,那就太好了,然后您可以使用它来创建T类型的普通数组,例如这样。

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

< BR>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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);
    }
}

出:

1
2
123 123 123
data1 data2 123