2012-04-10 11 views
2

ジェネリックオブジェクト(つまりT)をリストに追加するメソッドaddがあります。私はこのメソッドを単体テストしたい。ジェネリック型を受け入れるメソッドを反映しよう

public static <T> List<T> add(List<T> list, T t) { 
    if(list == null) return null; 
    if(t == null) return list; 

    List<T> outputList = new ArrayList<T>(list); 
    outputList.add(t); // append item into list 

    return outputList; 
} 

私はメソッドを取得してテストしようとしています。私は次のコードスニペットを書いて、私が知っている方法が正しいとは限りません。

Class myClass = Myclass.class; 
Class<List<T>> clazz = (Class<List<T>>) Class.forName("java.util.ArrayList"); 
Method myObjectMethod = myClass.getMethod("add", ...) // i need to identify T's class 

NoSuchMethodの例外がいくつか発生します。

この方法の特定に誰かが助けてくれますか?上記のコードを修正するための任意のポインタ?

ありがとうございます!

+1

このメソッドをテストするには、なぜ興味がありますか? – darrengorman

+0

私はカスタムEclipseでこのメソッドを公開しています。あなたが知っているかもしれませんが、Eclipseはリフレクションを使用して(クラスをイントロスペクトしてメソッドを提案する)、Eclipseに追加する前に、単体テストを行いたいと思っています。 –

答えて

3

clazzは、おそらくList.classであり、ArrayList.classではありません。メソッド定義で使用されている正確な生の型を使用する必要があります。

+0

ジェネリックリスト?また、このクラスのメソッドを取得するために、2番目のパラメータ、つまりTにClassを渡すにはどうすればよいですか。 –

+1

タイプの消去のため、ジェネリックはリフレクションに関する限りありません。あなたが記述したメソッドを得るには、 'myClass.getMethod(" add "、List.class、Object.class)'を渡す必要があります。 –

関連する問題