2014-03-24 1 views
0

나는 그것의 생성자에서 유형 매개 변수를 객체 정의 :목록 유형을 얻는 방법 <aType>?

public DynParameterDaoImpl(Class<T1> type) { 
     super(); 
     ... 
    } 

instanciation 잘 유형이 목록 인이 할 수있는 방법이 있나요

DynParameterDaoImpl myVar = new DynParameterDaoImpl(Atype.class); 

하고있는 작품. 타입 소거 List<X> 모든 참조 형식 X위한 List<Y>과 같은 클래스로 표현되는 것을 보장하기 때문에 다음은

DynParameterDaoImpl myVar = new DynParameterDaoImpl(List<Atype>.class); 
+1

유형 토큰을 살펴보십시오. –

답변

2

List<AType>는 유형이다 .. 작동하지 않을 수 있지만, 클래스 아니다 Y. List<String>List<Number>을 구별 할 수있는 가상 머신에 사용할 수있는 충분한 정보가 없기 때문에 예를 들어

List<String> strings = new ArrayList<String>(); // Legal 
boolean b = strings instanceof List<Number>; // Compiler Rejects 

컴파일러는 instanceof 확인을 거부합니다.

는 다음 반사 해당

Class<? extends List<String>> stringListClass = strings.getClass(); // Illegal 
Class<? extends List<Number>> numberListClass = List<Number>.class; // Illegal 
boolean b = numberListClass.isAssignableFrom(stringListClass); 

유형 안전의 자동 위반 될 것이라고 전달할 것, List<String> 같은 비 클래스 형식의 클래스 값을 얻을 수 있다면.

+0

매우 명확한 정보를 제공해 주셔서 감사합니다. 필자는'List '을'List '에있는 getters와 setters를 가진'class ATypeList'에 캡슐화하고 싶었습니다. 이제는 모든 것이 잘 작동합니다. –

2

유효 자바.

는 제네릭 형식 정보를 런타임에 삭제된다는 사실에서 줄기 둘 다 새로운 코드에서 원시 타입을 사용하지 않아야 규칙, 두 개의 작은 예외가 있습니다. 클래스 리터럴에서 원시 유형을 사용해야합니다. 이 사양은 매개 변수가있는 형식의 사용을 허용하지 않습니다 (배열 형식 및 기본 형식을 허용하지만). 즉 List.class, String[].classint.class은 모두 유효하지만 List<String>.classList<?>.class은 유효하지 않습니다.

관련 문제