2012-04-10 4 views
2

У меня есть метод add, который добавляет общий объект (т. Е. T) в список. Я хочу, чтобы модуль тестировал этот метод.Попытка отразить метод, который принимает общий тип

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. Вы должны использовать точный тип raw, используемый в определении метода.

+0

Можете ли вы объяснить, как я могу обрабатывать общий список ie.e List ? Кроме того, как я могу передать класс для второго параметра, т. Е. T, чтобы получить метод в этом классе. –

+1

Из-за стирания типа дженерики не существуют в отношении отражения. Вам нужно передать 'myClass.getMethod (" add ", List.class, Object.class)', чтобы получить описанный вами метод. –

Смежные вопросы