Java 일반 3: extends super 상세 설명 와일드카드
5984 단어 Java 프로그래밍
와일드카드 및 T의 차이점
T: 템플릿에 작용하며 데이터 형식을 매개 변수화하는 데 사용되며 실례화된 대상에 사용할 수 없습니다.?:대상을 실례화할 때 일반 파라미터의 구체적인 유형을 확정하지 못할 때 어댑터를 사용하여 대상을 정의할 수 있다.
< T > < T extends Object>
< ? > < ? extends Object>
예1: 키,value의 데이터 형식을 < K, V > 매개 변수화하고 어댑터를 사용할 수 없습니다.
public class Container {
private K key;
private V value;
public Container(K k, V v) {
key = k;
value = v;
}
}
예2: 실례화된 범용 대상은 eList가 저장한 데이터 유형이
Integer
인지 Long
인지 확인할 수 없기 때문에 우리는 List extends Number>
를 사용하여 변수의 유형을 정의한다.List extends Number> eList = null;
eList = new ArrayList();
eList = new ArrayList();
상위 유형 와일드카드 문자(?extends)
List extends Number> eList = null;
eList = new ArrayList<Integer>();
Number numObject = eList.get(0); // 1,
//Type mismatch: cannot convert from capture#3-of ? extends Number to Integer
Integer intObject = eList.get(0); // 2,
//The method add(capture#3-of ? extends Number) in the type List3-of ? extends Number> is not applicable for the arguments (Integer)
eList.add(new Integer(1)); // 3,
문장1:
List extends Number>
eList는 Number와 그 하위 클래스의 대상을 저장하고 문장1은 Number(또는 Number 하위 클래스)의 대상을 꺼내서 Number 유형에 직접 부여하는 변수는 자바규범에 부합된다.문장2: List extends Number>
eList는 Number와 그 하위 클래스의 대상을 저장하고 문장2는 Number(또는 Number 하위 클래스)의 대상을 인덱스 형식(Number 하위 클래스)에 직접 부여하는 변수를 추출하는 것은 자바규범에 부합되지 않는다.문장3: List extends Number>
eList는 실례화 대상의 구체적인 유형을 확정할 수 없기 때문에 구체적인 대상을 목록에 추가할 수 없습니다. 가능한 실례화 대상은 다음과 같습니다.eList = new ArrayList<Integer>();
eList = new ArrayList<Long>();
eList = new ArrayList();
요약: 상계 형식 어댑터dd 방법은 제한되지만 목록에 있는 여러 종류의 데이터를 가져와 부모 형식 (extends Number) 에 값을 부여할 수 있습니다.따라서 데이터 형식에서 데이터를 얻으려면 사용하시겠습니까?extends 와일드카드한정 어댑터는 항상 자신을 포함한다.
하계 유형 와일드카드(?super)
List super Integer> sList = null;
sList = new ArrayList();
//Type mismatch: cannot convert from capture#5-of ? super Integer to Number
Number numObj = sList.get(0); // 1,
//Type mismatch: cannot convert from capture#6-of ? super Integer to Integer
Integer intObj = sList.get(0); // 2,
sList.add(new Integer(1)); // 3,
문장1:
List super Integer>
sList에 저장된 대상의 구체적인 유형을 확정할 수 없기 때문에 sList.get
얻은 값에 불확실성이 존재하고 하위 클래스 대상의 인용은 형제 클래스의 인용에 값을 부여할 수 없으며 상위 클래스 대상의 인용은 하위 클래스의 인용에 값을 부여할 수 없기 때문에 문장 오류가 발생했습니다.문장 2: 같은 문장 1.문장3: 하위 클래스 대상의 인용은 부모 클래스 대상의 인용에 값을 부여할 수 있기 때문에 문장이 정확하다.총괄: 하계 형식 어댑터 get 방법은 제한되지만 목록에 다양한 데이터 형식의 대상을 추가할 수 있습니다.그래서 만약 당신이 대상을 데이터 구조에 쓰고 싶다면 사용하시겠습니까?super 와일드카드한정 어댑터는 항상 자신을 포함한다.총결산
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
elasticsearch mappingjavaAPi 만들기javaapi로 호출된 코드는 다음과 같습니다. 빈 색인 라이브러리 만들기 put mapping 설명: school: 색인;(라이브러리 이름) student: 형식입니다.(테이블 이름) properties 아래는 색...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.