首頁 >Java >java教程 >java泛型中的上界(extend)和下界(super)

java泛型中的上界(extend)和下界(super)

(*-*)浩
(*-*)浩轉載
2019-08-22 15:54:343928瀏覽

java泛型中的上界(extend)和下界(super)

泛型中上界與下界的定義

#上界

下界< ? super Apple>

上界與下界的特點

#上界的list只能get,不能add(確切地說不能add出除null之外的對象,包括Object)

下界的list只能add,不能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);
  }
}

這些特點的原因

上界

下界 ,表示Apple的所有父類,包括Fruit,一直可以追溯到老祖宗Object 。那麼當我add的時候,我不能add Apple的父類,因為不能確定List裡面存放的到底是哪個父類。但是我可以add Apple及其子類別。因為不管我的子類別是什麼類型,它都可以向上轉型為Apple及其所有的父類別甚至轉型為Object 。但是當我get的時候,Apple的父類別這麼多,我用什麼接著呢,除了Object,其他的都接不住。

所以,歸根結底可以用一句話表示,那就是編譯器可以支援向上轉型,但不支援向下轉型。具體來講,我可以把Apple物件賦值給Fruit的引用,但如果把Fruit物件賦值給Apple的引用就必須得用cast

以上是java泛型中的上界(extend)和下界(super)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除