2012-08-01 3 views
1

나는 클래스로 이렇게 정의가 :제네릭을 사용하여이 클래스 할당을 수행 할 수없는 이유는 무엇입니까?

public abstract class AbstractUploadField<T> { 

그리고 자바에서 그런

public class GroupField<T> extends AbstractUploadField<T> { 

을 내가 만들 제네릭을 사용하려고 클래스가

Class<? extends AbstractUploadField<?>> clazz = GroupField.class 
AbstractUploadField

의 서브 클래스입니다 확인

위의 코드는 컴파일되지 않지만 두 번째 와일드 카드를 제거하면 다음과 같이됩니다.

Class<? extends AbstractUploadField> clazz = GroupField.class 

내가 처음 할당이 라인에서

+0

그리고 컴파일 오류는 ...? – OrangeDog

+0

또한'instanceof AbstractUploadField'가 충분하지 않습니까? – OrangeDog

+0

클래스 을 클래스 > – mogronalol

답변

1

GroupFieldAbstractUploadField가 모두 동일한 제네릭 형식 T

가 있어야 작동하지 않을 이유를 이해하지 않습니다

Class<? extends AbstractUploadField<?>> clazz = GroupField.class 

첫 번째에게 와일드 카드는 첫 번째 명령문과 모순되는 두 번째 와일드 카드와 다를 수 있습니다.

문 :

Class<? extends AbstractUploadField> clazz = GroupField.class 

작동하지만 난 당신이 그것에 대한 경고를 받고 assusme.

+0

필자는 따라 가지 않습니다. 첫 번째 와일드 카드는 AbstractUploadField가있는 클래스를 superType으로 허용합니다. 두 번째 와일드 카드는 모든 객체 유형을 허용합니다. AbstractUploadField 하위 유형이 객체에 대한 다른 상한을 추론 할 수 있다는 것을 의미합니까? 왜 이것이 GroupField.class를 허용하지 않는지 모르겠다. – mogronalol

관련 문제