> Java > java지도 시간 > `목록에 `상위` 인스턴스를 추가할 수 없는 이유는 무엇입니까?

`목록에 `상위` 인스턴스를 추가할 수 없는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-30 19:34:11
원래의
928명이 탐색했습니다.

Why Can't I Add a `Parent` Instance to a `List

와일드카드 일반 유형 합병증

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿