'super' 키워드를 사용한 경계 제네릭: 포괄적인 설명
Java 제네릭은 유형 안전성과 코드 재사용성을 허용합니다. 제네릭의 한 측면은 유형 매개변수가 특정 하위 유형 관계로 제한될 수 있는 유형 경계입니다. 그러나 와일드카드와 달리 'super' 키워드를 사용하여 유형 매개변수를 제한할 수 없습니다.
Collection 인터페이스에서 toArray 메소드는 'S'가 유형 매개변수인 'S[]' 유형의 인수를 사용합니다. 메소드가 ''로 선언되지 않은 이유에 대한 질문이 발생합니다. 와일드카드 '' 대신.
답은 '슈퍼' 경계 동작에 있습니다. 'super'는 일반적으로 와일드카드(<'? super T'>)와 함께 사용되지만 이를 유형 매개변수('> 대신 <'')에 적용하면 다음과 같습니다. 의도하지 않은 결과. Object는 모든 참조 유형의 슈퍼클래스입니다. 즉, 'Object[]'는 '<'S super T>>'에 대한 유효한 인수입니다. 컴파일 타임에. 이는 'T'의 하위 클래스가 아닌 참조 유형 인수도 전달될 수 있으므로 경계의 목적을 무산시킵니다.
따라서 유형 매개변수에 대한 '슈퍼' 경계는 이에 대한 예상되는 보호를 제공하지 않습니다. 잘못된 인수입니다. 설명을 위해, 가상의 방법 '<> S[] toArray(S[] a)' 및 '
이러한 제한은 제네릭과 배열 간의 상호 작용에서 비롯됩니다. 제네릭과 배열은 서로 다른 공분산 규칙을 갖고 있어 관찰된 동작으로 이어집니다.
이 제한은 유형 매개변수에만 적용된다는 점에 유의하는 것이 중요합니다. '<'?에서 볼 수 있듯이 가변성을 표현하기 위해 여전히 'super'를 사용하여 와일드카드를 바인딩할 수 있습니다. 슈퍼 T>' toArray 메소드를 사용하면 유연성이 향상됩니다.
제네릭 및 유형 경계에 대한 자세한 내용은 다음 리소스를 참조하세요.
위 내용은 Java Generics에서 유형 매개변수 경계에 \'super\' 키워드를 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!