2012-04-10 43 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 2012-04-10 18:09:52

+0

我在自定義Eclipse中公開這個方法。正如你可能知道的,Eclipse使用反射(反思類和建議方法)。所以,在將它添加到Eclipse之前,我只想單元測試。 – 2012-04-10 21:29:36

回答

3

clazz應該可能是List.class而不是ArrayList.class。您必須使用方法定義中使用的確切原始類型。

+0

你能解釋我該如何處理一個通用列表ie.e List ?另外,我如何通過類的第二個參數,即T來獲得這個類的方法。 – 2012-04-10 18:12:10

+1

由於類型刪除,就反射而言,泛型並不存在。你需要傳遞'myClass.getMethod(「add」,List.class,Object.class)'來獲得你描述的方法。 – 2012-04-10 18:15:21

相關問題