2012-05-13 3 views
0

그런 구문을 사용하는 용도가 무엇인지 알고 싶습니다. 나는 다음과 같이 간단한 프로그램,이 같은 컴파일 오류를 보여줍니다 왜클래스 <? extends T> 사용법

public class Sample{ 

    public static void main(String[] args) { 
     Class<? extends Collection> someCollectionClass = someMethod(); 
    } 

    public static ArrayList someMethod() { 
     return new ArrayList(); 
    } 
} 

,

- Collection is a raw type. References to generic type Collection<E> should be 
parameterized 
- Type mismatch: cannot convert from ArrayList to Class<? extends Collection> 

여기에서 그 클래스 (그것이 알고에 동의 함을 그 실제로 객체를 클래스를 기대 하시는가를 작성했습니다, 그것은이다 ?) 컬렉션을 확장합니다. ArrayList에 문제가 있습니까? ArrayListClass 없기 때문에 구 제가

Class<? extends T>
+0

당신은 클래스 ''로 뭔가를 선언 할 수 있지만, 자바의 모든 객체를 참조하지 않는, 즉 클래스가'Object'가 무엇의 자세한 내용은 여기를보세요 :. HTTP ://docs.oracle.com/javase/6/docs/api/java/lang/Class.html을 참조하십시오. 그러나 클래스는 실제 구현 및 세부 정보를 참조합니다. – dcpomero

답변

1

첫 번째 오류 메시지는 선언의 형식 매개 변수에서 유래 , 선언문에는 아무 것도 표기되어 있지 않다. 똑같은 것은 ArrayList의 꾸밈없는 사용에도 적용됩니다.

그러나 선언문은 실제로 생각한대로 작동하지 않습니다 ... someCollectionClass이라는 변수를 실제로 선언합니다. Class<? extends Collection> 유형의 인스턴스, 즉 (리플렉션) 클래스 설명자를 할당 할 수 있습니다. 특정 유형). 두 번째 오류 메시지는 그것에 대해 불평하는 컴파일러입니다. ArrayList (someMethod이 반환 함)의 인스턴스는 "Class<...>의 인스턴스 만 허용"(Java 런타임 유형을 설명하는 특수한 변수입니다)으로 선언 된 변수에 할당 할 수 없습니다. . 클래스)

Collection someCollection = someMethod(); 
+0

이러한 구문의 실제 사용법은 무엇입니까? 컬렉션>? – Harshana

5

같은 것을 선언하는 경우 경우

도 유효한 것이된다. 아마도 someMethod().getClass()을 의미할까요?

0

someMethod가 List 유형의 인스턴스를 반환하면이를 인스턴스가 아닌 Collection 클래스를 예상하는 변수에 할당하려고합니다. 다음 코드가 작동해야합니다. 인터페이스 Collection이 유형의 매개 변수를 사용하기 때문에

Class<? extends Collection> someCollectionClass = someMethod(); 

유형 Collection는 자바에서 "원시 형태"라고 무엇 :

Collection someCollectionClass = someMethod(); 
관련 문제