와일드카드 일반 유형 합병증
Java 와일드카드 제네릭은 특정 구체적인 유형을 지정하지 않고도 유형을 나타내는 방법을 제공합니다. 이러한 유연성은 강력할 수 있지만 예기치 않은 동작으로 이어질 수도 있습니다.
상위 인터페이스의 알 수 없는 하위 유형에 대한 Java 목록이 정의된 다음 예를 고려하십시오.
List<? extends Parent> list = ...;
그러나 Java의 유형 시스템은 이 목록에 상위 인스턴스를 추가하는 것을 허용하지 않습니다.
Parent p = factory.get(); // returns concrete implementation list.set(0, p); // compilation error
이 명백한 모순은 유형 개념에서 발생합니다. 안전. 목록에 상위 인스턴스 추가를 허용하면 와일드카드 일반 유형의 무결성이 손상될 수 있습니다. 이유는 다음과 같습니다.
이러한 추가가 허용되는지 상상해 보세요. Parent의 구체적인 하위 유형인 Child 인스턴스 목록이 있다고 가정합니다.
List<Child> childList = new ArrayList<Child>(); childList.add(new Child());
이 childList를 와일드카드 일반 유형을 사용하여 목록에 할당하면 목록이 있는 것처럼 보입니다. 상위 인스턴스 수:
List<? extends Parent> parentList = childList;
그러나 잠재적으로 여기에 상위 인스턴스를 추가할 수 있습니다. parentList:
parentList.set(0, new Parent());
이렇게 하면 심각한 유형 안전 위반이 발생할 수 있습니다. 나중에 childList에서 인덱스 0에 있는 항목을 검색할 때 Child 인스턴스일 것으로 예상하지만 실제로는 Parent 인스턴스이므로 예기치 않은 동작이 발생합니다.
이 유형 안전 위반을 방지하려면, Java는 상위 유형의 인스턴스를 검색할 수 있더라도 와일드카드 일반 유형 자체의 인스턴스만 목록에 추가할 수 있다는 규칙을 적용합니다. 이러한 제한은 유형 매개변수의 무결성을 보장하고 잠재적인 버그를 방지합니다.
위 내용은 `목록에 `상위` 인스턴스를 추가할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!