제네릭의 상한 및 하한 정의
상한
상한 및 하한의 특징
상한의 목록은 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을 사용하여 계속할 수 있습니다. 즉, 모든 하위 클래스를 변환할 수 있습니다. 위쪽으로 과일로.
하한선 super Apple>은 Fruit을 포함한 Apple의 모든 상위 클래스가 상위 객체로 추적될 수 있음을 의미합니다. 그런 다음 추가할 때 목록에 어떤 상위 클래스가 저장되어 있는지 확인할 수 없기 때문에 Apple의 상위 클래스를 추가할 수 없습니다. 하지만 Apple과 그 하위 클래스를 추가할 수 있습니다. 내 하위 클래스의 유형이 무엇이든 Apple 및 모든 상위 클래스 또는 심지어 Object로 상위 클래스로 변환될 수 있기 때문입니다. 그런데 Apple의 상위 클래스가 너무 많아서 연결하려면 무엇을 사용해야 합니까? Object 외에는 연결할 수 없습니다.
그래서 최종적으로 분석하면 한 문장으로 표현 가능합니다. 즉, 컴파일러는 상향 변환은 지원하지만 하향 변환은 지원하지 않습니다. 구체적으로 Apple 객체를 Fruit 참조에 할당할 수 있지만, Fruit 객체를 Apple 참조에 할당하려면 Cast
를 사용해야 합니다.위 내용은 Java 제네릭의 상한(확장) 및 하한(슈퍼)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!