2017-08-02 17 views
0

私のコードスニペット。私は明示的にインスタンス化Integer.classを渡していたよう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); 

これは、動作します。これを一般的なものにするにはどうすればよいですか?

または ParameterizedTypeを使用してGenericArrayに渡された型情報を出力する方法はありますか?そのため型消去の

答えて

2

、あなたは、コンストラクタで引数として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); 
+0

ありがとうございます。完璧。これを拡張して、私はどのように印刷しているタイプのクラスを印刷できますか?私はSystem.out.println((ParameterizedType)getClass()。getGenericSuperclass())を試してみました。 – sunhara

-1

です:

GenericArray<String, Integer> myobj = new GenericArray<>(“John”,2); 

それとも

における一般的な方法で表示与えられたコードを考えてみましょう()、配列パラメータを受け入れることその議論として。

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

同様に、2つの型パラメータを持つクラスを宣言できます。

関連する問題