소개:
Java Generics의 'super' 키워드 이해 당황스러운 작업이 될 수 있습니다. 이 글은 구체적인 예를 통해 개념의 미묘한 차이를 탐구하고 일반적인 오해를 해결함으로써 이 개념을 밝히는 것을 목표로 합니다.
'Super' 키워드를 사용한 제한된 제네릭:
제한된 와일드카드 목록 슈퍼 넘버> Number 및 해당 상위 유형을 캡처할 수 있습니다. 그러나 이것이 이 목록에 숫자 상위 유형을 추가할 수 있다는 의미는 아니라는 점에 유의하는 것이 중요합니다.
객체 대 정수의 예기치 않은 동작:
예를 들어, Integer(0)을 List super Number>, Object()는 그럴 수 없습니다. 이 동작은 제한된 와일드카드에 대한 캡처 변환 규칙에서 발생합니다. 목록 슈퍼 넘버> 숫자, 개체 및 직렬화 가능 항목만 캡처할 수 있으며 숫자 중 숫자가 가장 낮은 상위 유형입니다.
목록에 문자열을 추가하는 이유 슈퍼 넘버> 컴파일되지 않음:
String이 Number의 슈퍼클래스인 Object를 확장하더라도 String을 List 슈퍼 넘버> 컴파일에 실패합니다. 이는 제한된 와일드카드가 PECS(생산자 확장, 소비자 슈퍼) 지침을 따르기 때문입니다. 목록 슈퍼 넘버> 는 Number의 소비자이므로 인수 유형은 String의 생성자가 될 수 없습니다.
왜 Java Generics에서 허용됩니까?
Java 제네릭의 구문은 의미가 없다는 사실에서 비롯됩니다. 제네릭 유형이 바인딩된 상위 유형을 허용할 수 있는 경우 특정 유형 매개변수가 필요하지 않습니다.
결론:
Java 제네릭의 'super' 키워드 이해 PECS 지침에 대한 의미와 준수에 대한 신중한 고려가 필요합니다. 이러한 개념을 이해하면 제한된 와일드카드를 효과적으로 활용하여 API의 유연성을 향상시킬 수 있습니다.
위 내용은 Java Generics: `super` 키워드는 실제로 제한된 와일드카드와 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!