如何为java.lang.reflect.Array.newInstance传递泛型类型?

时间:2017-08-02 01:38:52

标签: java generics reflection

我的代码段。

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的类型信息? (如果我可能得到这个,我会处理使用if语句)

2 个答案:

答案 0 :(得分:2)

由于类型擦除,您需要在构造函数中将g++ -o main.o main.c `pkg-config --cflags --libs libavformat` 作为参数传递,例如

Class<T>

并在构造函数中传递该类,在使用时不要使用raw type。也就是说,

public GenericArray(Class<T> cls, int max) // constructor
{
    a = (T[]) java.lang.reflect.Array.newInstance(cls, max);
}

答案 1 :(得分:-1)

您可以通过传递类型:

来为您的类参数化
GenericArray<String, Integer> myobj = new GenericArray<>(“John”,2); 

或者

考虑给定代码,其中通用方法display()接受数组参数作为其参数。

class GenericArray <T extends Comparable<T>>
    {    
    public<T> display(T[] val) {       
    for( T element : val)     
    {             
     System.out.printf(“Values are: %s “ , element);    
    }   
    }
    // Declaring Array
    GenericArray[] intValue = {1, 7, 9, 15};                
    GenericArray<Integer> listObj = new GenericArray<> (); 
    // Passing Array values               
    listObj.display(intValue);

类似地,您可以声明具有两个类型参数的类。