2012-07-03 3 views
8

다음 코드가 있지만 모든 제네릭과 혼동 스럽습니다.무엇입니까? <T> 목록 <T> methodName (목록 <? super T> 입력)

public static <T> List<T> backwards (List<? super T> input) { 
     List<T> output = new ArrayList<T>(); 
     return output; 
} 

나의 이해는 내가 ArrayList에 List 인터페이스를 구현하고 ArrayList의 반환을 생성 backwards라는 공용 방법을 가지고있다.

<T> 

"나는 임의의 유형을 선언 해요 : 제 질문은 당신은 컴파일러에 말을

static <T> List<T> backwards (List<? super T> input) 
+2

'backwards' 그 * 형 *가 T''의 슈퍼 일부 * 형 * 목록에 걸리고, 반환 (예를 들어, 입력 의''목록 될 수 있음) 'T'의 목록. – Mehrdad

+0

설명해 주신 Mehrdad에게 감사드립니다. – user1459497

+0

'입력'은'뒤로 '에서 사용됩니까? 나는 그것이 어디에서 사용될 것인지를 보지 못했다. – Crazenezz

답변

31

내가 ...... 다음 부분 컴파일러에 말하고 실제로 무엇인가 T이 메소드의 각 호출에 대해 (비 프리미티브) 아무것도 될 수 있습니다. "

List<T> 

"이 방법은 그 형태 TList의 함유 원소를 리턴 할 것이다."

List<? super T> input 

"타입 T 또는 T 임의의 수퍼 타입의 요소를 포함하는 List이다 input라는 변수를 취할 것이다. 예를 들어, TInteger 경우이 방법은 inputList<Integer>, List<Number> 수 있었다 또는 List<Object> "

+0

폴 감사합니다. 귀하의 설명은 매우 명확하고 상세합니다. – user1459497

+5

이것은 'public static List '이라는 메쏘드가'public static List '과 비교되는 것을 의미하지 않습니다. – 2rs2ts

+2

@agarrett'public static List '는 타입 파라미터를 선언하지 않으므로 이미 선언 클래스의 제네릭 타입 파라미터'T'의 범위 내에 있어야합니다. 그러나 문제는 그 말조차하지 않는다. 그래서 나는 왜 네가 그것을 가져 왔는지 알지 못한다. –