앞에서 말 했 듯 이 위로 전환 하 는 것 은 안전 하고 아래로 전환 하 는 것 은 안전 하지 않다.List 의 실제 유형 을 알 지 않 으 면 아래로 전환 하 는 것 이 잘못 될 것 이다. extends List extends Number>foo 3 은 아래 의 할당 문 구 를 합 법 적 으로 의미 합 니 다.
List<?extendsNumber> foo3 =newArrayList<Number>();// Number "extends" Number (in this context)
List<?extendsNumber> foo3 =newArrayList<Integer>();// Integer extends Number
List<?extendsNumber> foo3 =newArrayList<Double>();// Double extends Number
1.읽 기 상기 가능 한 할당 문 구 를 지정 하면 List foo3 에서 어떤 유형의 대상 을 꺼 낼 수 있 습 니까?
은 Number 대상 을 읽 을 수 있 습 니 다.위의 임의의 list 는 Number 대상 이나 Number 하위 클래스 의 대상(위의 Number,Integer,Double 은 Number 로 전환 할 수 있 고 안전 하기 때문에 읽 을 수 있 습 니 다)을 포함 합 니 다.다음 코드 는 틀 리 지 않 습 니 다:
List<?extendsNumber> foo4 =newArrayList<Integer>();
Number number = foo4.get(0);
은 Integer 대상 을 읽 을 수 없습니다.foo3 은 List 을 가리 킬 수 있 기 때 문 입 니 다.다음 코드 를 컴 파일 할 때 foo3 오 류 를 보고 합 니 다:
List<?extendsNumber> foo4 =newArrayList<Integer>();
Integer number = foo4.get(0);
컴 파일 할 때 컴 파일 러 는 foo 4 참조 가 하나의 List extends Number>인 것 만 알 고 실행 할 때 new Array List()에 연결 되 기 때문에 컴 파일 할 때 foo 4 가 가리 키 는 List 에서 어떤 유형 인지 판단 할 수 없습니다.유일 하 게 확실한 것 은 이 유형 이 Number 의 하위 클래스(또는 Number 클래스)입 니 다.
도 Integer 대상 을 읽 을 수 없습니다.Incompatible types 이 가리 킬 수 있 는 것 은 Double 이기 때 문 입 니 다.
2.쓰기 상기 가능 한 할당 문 구 를 지정 하면 foo3 에 어떤 유형의 대상 을 추가 하여 가능 한 모든 List 이 합 법 적 이라는 것 을 보증 할 수 있 습 니까?
은 List foo3 대상 을 추가 할 수 없습니다.ArrayList 은 Integer 을 가리 킬 수 있 기 때 문 입 니 다.다음 코드 는 컴 파일 오류 가 발생 할 수 있 습 니 다:
컴 파일 기간 동안 foo 4 가 가리 키 는 Array List 에 어떤 유형 이 들 어 있 는 지 알 수 없 기 때문에 실행 할 때 만 알 수 있 습 니 다.실행 할 때 하나의 Array List 에 하나의 Integer 를 추가 하 는 것 을 발견 하기 보 다 는 형식 변환 이상 을 초래 하 는 것 이 좋 습 니 다.컴 파일 할 때 오 류 를 보고 하 는 것 이 좋 습 니 다.설령 Array List 에 Integer 형식 이 놓 여 있 더 라 도.
은 foo3 대상 을 추가 할 수 없습니다.List 은 Double 을 가리 킬 수 있 기 때 문 입 니 다.
은 foo3 대상 을 추가 할 수 없습니다.List 은 Number 을 가리 킬 수 있 기 때 문 입 니 다.
요약:foo3 에 대상 을 추가 할 수 없습니다.List 이 진정 으로 어떤 유형 을 가리 키 는 지 보장 할 수 없 기 때문에 추가 대상 이 List extends T> 이 받 아들 일 수 있 는 유형 인지 확인 할 수 없습니다.보증 할 수 있 는 것 은 List 에서 읽 을 수 있 을 때 List 유형의 대상(List 유형의 하위 대상 이라도 T 유형)을 얻 을 수 있 습 니 다. Super 현재 T 에 마스크 를 포함 하 는 성명 T 을 고려 하면 다음 의 모든 할당 문 구 는 합 법 적 이라는 것 을 의미한다.
List<?super Integer> foo3 =newArrayList<Integer>();// Integer is a "superclass" of Integer (in this context)
List<?super Integer> foo3 =newArrayList<Number>();// Number is a superclass of Integer
List<?super Integer> foo3 =newArrayList<Object>();// Object is a superclass of Integer
1.읽 기 상기 가능 한 할당 문 구 를 지정 합 니 다.List super T> 의 요 소 를 읽 을 때 어떤 유형의 대상 을 받 을 수 있 습 니까?
은 List super Integer> foo3 대상 이 라 고 보장 할 수 없습니다.List foo3 은 Integer 또는 foo3 대상 을 가리 킬 수 있 기 때 문 입 니 다.List 은 List
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: