我的代码段。
public class GenericArray <T extends Comparable<T>>{
private T[] a;
private int nElems;
public GenericArray(int max) // constructor
{
a=(T[])java.lang.reflect.Array.newInstance(Integer.class, max);
//Hard coded for Integer.
}
}
GenericArray arr= new GenericArray<Integer>(100);
当我实例化显式传递Integer.class时,此方法有效。我如何使它成为通用的?
要么
有没有一种方法可以打印使用ParameterizedType传递给GenericArray的Type信息? (如果可能的话,我会使用if语句来处理)
最佳答案
由于类型擦除,您需要将Class<T>
作为参数传递给构造函数,例如
public GenericArray(Class<T> cls, int max) // constructor
{
a = (T[]) java.lang.reflect.Array.newInstance(cls, max);
}
并在构造函数中传递该类,请在使用raw type时不要使用它。那是,
GenericArray<Integer> arr = new GenericArray<>(Integer.class, 100);