> Java > java지도 시간 > 본문

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

(*-*)浩
풀어 주다: 2019-08-22 15:54:34
앞으로
3876명이 탐색했습니다.

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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!