簡體   English   中英

如何為java.lang.reflect.Array.newInstance傳遞通用類型?

[英]How do I pass generic type for java.lang.reflect.Array.newInstance?

我的代碼段。

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

並在構造函數中傳遞該類, 不要在使用原始類型時使用原始類型 那是,

GenericArray<Integer> arr = new GenericArray<>(Integer.class, 100); 

您可以通過傳遞如下類型來參數化您的類:

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

同樣,您可以使用兩個類型參數聲明一個類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM