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() { } } |
您可以使用类似于
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 |