2012-08-11 2 views
8

Class<? extends Integer> 잘 컴파일하지만 상한 (아무것도 의지 적 extend을)를로 사용할 이해가되지 않도록 Integer은 최종 형식입니다 것입니다. 당신은 형식 매개 변수에 대한 상한으로 최종 유형을 사용하려고하면와일드 카드 최종 상한

, 당신은 컴파일러 경고를 받게됩니다 :

유형 매개 변수 T는 최종 형 정수에 의해 제한되어서는 안된다. 마지막 유형은 더 왜 와일드 카드는 완벽하게 잘 수 있지만, 형식 매개 변수에 대한 경고를 던져에 대한 상한으로 최종 유형을 사용하는 것입니다

을 확장 할 수 없습니다? 왜 Java는 와일드 카드가 최종 상위 유형으로 묶일 수 있도록 허용합니까?

답변

5

Class<Integer>Class<? extends Integer>과 같이 할당 할 수 없습니다.

예를 들어,이 컴파일 :

Class<? extends Number> numberClass = Integer.class; 
Class<? extends Integer> integerClass = numberClass.asSubclass(Integer.class); 

이되지 않습니다

Class<? extends Number> numberClass = Integer.class; 
Class<Integer> integerClass = numberClass.asSubclass(Integer.class); 

에게 나 자신, 당신은 (아마도 당신은 예를 제공 할 수 않는 한 나는 컴파일러 경고를 얻을 수 있으며, 귀하의 컴파일러에 대한 자세한 내용은?).

+1

컴파일러가 자체적으로 '클래스 가 두 번째 예제에서 반환 된 경우'Integer'가 final이므로 Class 과 호환됩니다. 그러나 나는 컴파일러가 그 가치보다 더 복잡해질 것이라고 생각합니다. 어쩌면 경고는 이클립스에만 해당된다. Eclipse Juno (JDT 3.8.0 포함). – Jeffrey