>  기사  >  Java  >  Java 제네릭의 상한(확장) 및 하한(슈퍼)

Java 제네릭의 상한(확장) 및 하한(슈퍼)

(*-*)浩
(*-*)浩앞으로
2019-08-22 15:54:343867검색

Java 제네릭의 상한(확장) 및 하한(슈퍼)

제네릭의 상한 및 하한 정의

상한Lower Bound

상한 및 하한의 특징

상한의 목록은 get, 추가 불가(정확히 말하면 null 이외의 객체는 추가 불가, Object 포함)

하한 목록은 추가만 가능, get 불가

import java.util.ArrayList;
import java.util.List;
 
class Fruit {}
class Apple extends Fruit {}
class Jonathan extends Apple {}
class Orange extends Fruit {}
 
public class CovariantArrays {
  public static void main(String[] args) {
	//上界
    List<? extends Fruit> flistTop = new ArrayList<Apple>();
    flistTop.add(null);
    //add Fruit对象会报错
    //flist.add(new Fruit());
    Fruit fruit1 = flistTop.get(0);
 
	//下界
    List<? super Apple> flistBottem = new ArrayList<Apple>();
    flistBottem.add(new Apple());
    flistBottem.add(new Jonathan());
    //get Apple对象会报错
    //Apple apple = flistBottem.get(0);
  }
}
#🎜 🎜 #이러한 특성의 이유

상한 은 Fruit을 상속하는 모든 하위 클래스를 의미하지만 특정 하위 클래스를 결정할 수 없으므로 add 호출 시 아무도 어떤 유형을 추가할지 알고 있습니다. 그러나 가져올 때 어떤 하위 클래스이든지 몇 세대를 거슬러 올라가더라도 Fruit이라는 상위 클래스가 있어야 합니다. 따라서 가장 큰 상위 클래스인 Fruit을 사용하여 계속할 수 있습니다. 즉, 모든 하위 클래스를 변환할 수 있습니다. 위쪽으로 과일로.

하한선 은 Fruit을 포함한 Apple의 모든 상위 클래스가 상위 객체로 추적될 수 있음을 의미합니다. 그런 다음 추가할 때 목록에 어떤 상위 클래스가 저장되어 있는지 확인할 수 없기 때문에 Apple의 상위 클래스를 추가할 수 없습니다. 하지만 Apple과 그 하위 클래스를 추가할 수 있습니다. 내 하위 클래스의 유형이 무엇이든 Apple 및 모든 상위 클래스 또는 심지어 Object로 상위 클래스로 변환될 수 있기 때문입니다. 그런데 Apple의 상위 클래스가 너무 많아서 연결하려면 무엇을 사용해야 합니까? Object 외에는 연결할 수 없습니다.

그래서 최종적으로 분석하면 한 문장으로 표현 가능합니다. 즉, 컴파일러는 상향 변환은 지원하지만 하향 변환은 지원하지 않습니다. 구체적으로 Apple 객체를 Fruit 참조에 할당할 수 있지만, Fruit 객체를 Apple 참조에 할당하려면 Cast

를 사용해야 합니다.

위 내용은 Java 제네릭의 상한(확장) 및 하한(슈퍼)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제