2008-11-17 5 views
2

저는 여전히 Java의 제네릭을 사용하여 머리를 쓰려고합니다. 형식화 된 컬렉션을 사용할 때 전혀 문제가 없지만 나머지 부분은 대부분 나를 벗어나는 것처럼 보입니다.클래스 []을 제네릭으로 변환 하시겠습니까?

지금은 JUnit "PrivateAccessor"를 사용하려고합니다. 호출되는 private 메소드에 대한 모든 인수 유형 목록과 함께 Class [] 인수가 필요합니다. 자바 1.4, 나는

Class[] args = new Class[] { Collection.class, ArrayList.class }; 

하지만 실제 코드로 해주기로 내가 인수의 정의를 변경하려 인수

myMethod(Collection<MyClass1> first, ArrayList<MyClass2> second) 

을 위해 정의되는 것을 정의하는 것

Class<? extends Object>[] args = new Class<? extends Object>[] 
{ Collection<MyClass1>.class, ArrayList<MyClass2>.class }; 

하지만 이클립스는 닫는> 마커에 빨간색 마커를 표시하고 그 시점에서 "무효"를 예상하고 있습니다. 제네릭을 사용하여이 작업을 수행 할 수 있습니까, 아니면 방해해서는 안됩니까?

답변

6

당신이 첫 번째 문제는 당신이 이유를 설명 대신

Class<? extends Object>[] args = new Class<? extends Object>[] 

This

Class<?>[] args = new Class[] 

를 사용한다는 것입니다.

두 번째 문제는 당신이

{ Collection.class, ArrayList.class }; 

대신

{ Collection<MyClass1>.class, ArrayList<MyClass2>.class }; 

XXX.class 런타임에서 평가되기 때문에 type erasure이 그렇게 유형을 지정하여 수행 된 후이있다 사용해야한다는 것입니다 논쟁은 쓸모 없으므로 금지되어 있습니다.

FAQ 위의 두 설명과 관련하여 대부분의 질문을 명확히 할 수있는 Java generics에 대한 "기초적인"정보를 제공 할 것을 적극 권장합니다.

2

이 올바른 구문은 다음과 같습니다

Class<?>[] paramTypes = new Class[]{ Collection.class, ArrayList.class }; 
2

구체적 매개 변수화 된 유형의 배열 생성이 허용되지 않는 이유에 대한 자세한 설명은 Angelika's FAQ을 읽어보십시오.

yc

+0

bdumitriu가 참조한 링크를 두 번 게시 한 것으로 나타났습니다. 하지만 이건 우리가있는 주제에 곧바로 데려다 줄거야. – yclian

관련 문제