我的代码段。

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);

09-11 19:13