2010-03-27 2 views
15

Java의 형식 매개 변수에 상한 및 하한 제약 조건을 모두 지정할 수 있습니까?Java의 형식 매개 변수에 상한 및 하한 제약 조건을 모두 지정할 수 있습니까?

이 문제가 논의 된 a conversation in Sun's forum이 발견되었지만 (일반 기능이 완성되기 전에 외관상으로는) 최종 답변이 없었습니다.

public class MyClass<T extends Number super Integer> 

: 요약

,이 작업을 수행하는 올바른 구문은 무엇입니까?

답변

11

나는 언어 사양에서 알 수있는 한 "슈퍼"는 처음에는 와일드 카드 유형에만 유효합니다.

// Invalid 
void foo(List<? extends Foo super Bar> list) 

이 모두 괜찮 비록 :

// Valid 
void foo(List<? extends Foo> list) 

// Valid 
void foo(List<? super Bar> list) 

그래서이 하나 같이 뭔가를 사용할 수 없습니다 - 와일드 카드에 대한 구문은 또한 하나의 와일드 카드도 구속 한 수 있습니다 제안 덧글에 언급 된 바와 같이, (상위) 경계를 여러 개 가질 수 있지만 형식 매개 변수와 형 변환 식에만 사용할 수 있습니다.

// Valid 
<T extends Number & Comparable> void foo(List<T> list) 
+1

답장을 보내 주셔서 감사합니다. 코드가 유효하지 않다는 의견을 추가하여 아무도 유효하다고 (거짓으로) 생각하지 않도록 제안 할 수 있습니까? (예 : 검색 엔진 결과 페이지에 표시되는 경우) –

+0

@Hosam : 할 것입니다. –

+0

분명히하려면 여러 상한이있을 수 있습니다 (예 :'List '를 확장합니다. – NateS

5

Oracle's tutorial에서 :

참고 : 예를 들어, 당신은 와일드 카드에 대한 상한을 지정하거나 하한을 지정할 수 있습니다,하지만 당신은 모두를 지정할 수 없습니다.

관련 문제