我已经获得了一个实现类“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()
{
}
}
答案 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);
}
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