질문: 'super' 키워드를 사용할 수 없는 이유는 무엇입니까? 와일드카드와 달리 바인딩된 유형 매개변수는 무엇입니까?
답변:
유형 매개변수를 'super'(예: '')로 바인딩하는 것은 허용되지 않습니다. Java는 유형 바인딩에 사실상 무시할 만한 영향을 미치고 의도한 목적에 부합하지 않기 때문입니다.
다음 가상 코드를 고려하십시오.
interface Collection<T> { <S super T> S[] toArray(S[] a); }
이 코드는 'toArray' 메소드를 제안합니다. 'Collection' 인터페이스에는 'T'의 상위 유형인 'S' 유형 매개변수가 있어야 합니다. 그러나 이 경계는 모든 유형이 'Object'의 상위 유형이고 모든 참조 유형의 배열이 'Object[]'로 캐스팅될 수 있기 때문에 의미가 없습니다. 컴파일러는 모든 배열이 인수로 전달되도록 허용합니다. 의도된 하위 유형인지 여부에 관계없이 'toArray'.
따라서 'super'를 사용하여 유형 매개변수를 바인딩해도 'ArrayStoreException'과 같은 런타임 오류를 방지할 수 없습니다. 따라서 Java의 유형 시스템에서는 허용되지 않습니다.
예:
가상의 일반 메소드를 고려하십시오.
<T super Integer> void add(T number)
이 메소드는 '정수', '숫자' 및 '객체'(모두 '정수'의 상위 클래스이므로) 추가를 허용하지만 '문자열'은 허용하지 않습니다. 그러나 'Object'는 'Integer'의 슈퍼클래스이므로 암시적 캐스팅으로 인해 '문자열'이 추가될 수 있으며 이로 인해 런타임 오류가 발생할 수 있습니다.
추가 고려 사항:
관련 리소스:
Java 자습서/일반
위 내용은 Java 제네릭의 유형 매개변수를 바인딩하는 데 'super' 키워드를 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!