2012-04-10 2 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

clazzList.class이어야하며 ArrayList.class이 아야합니다. 메소드 정의에 사용 된 정확한 원시 유형을 사용해야합니다.

+0

일반 목록을 처리하는 방법을 설명 할 수 있습니까? 예 .e List ? 또한 두 번째 매개 변수 즉,이 클래스의 메서드를 가져 오는 T 클래스를 전달할 수 있습니다. –

+1

유형 삭제로 인해, 반영과 관련하여 제네릭이 존재하지 않습니다. 설명 된 메소드를 얻으려면'myClass.getMethod ("add", List.class, Object.class)'를 전달해야합니다. –

관련 문제