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 와일드카드한정 어댑터는 항상 자신을 포함한다.

총결산

  • 한정 어댑터는 항상 자신을 포함한다
  • 상계 유형 어댑터:add 방법 제한
  • 하계 유형 어댑터: get 방법 제한
  • 데이터 형식에서 데이터를 얻으려면 사용하시겠습니까?extends 와일드카드
  • 대상을 데이터 구조에 기록하고 싶으면 사용하시겠습니까?super 와일드카드
  • 저장하고 싶고 찾으려면 어댑터를 사용하지 마세요
  • 범형 어댑터 상계와 하계를 동시에 성명할 수 없음
  • 좋은 웹페이지 즐겨찾기