Java中的泛型


通配符是什么

<?>
指的是Object及其子類,也就是所有Java對象

泛型是什么

  1. <E>:Element (容器中的元素,如集合)
  2. <T> :Type(Java 類)
  3. <K>:Key(鍵)
  4. <V>:Value(值)
  5. <N> :Number(數值類型)
  6. <S>、<U><A> 、<B> ….

聲明泛型

<T>
聲明一個泛型類或者泛型方法 
示例:

 

使用泛型

<?>
使用一個泛型類或者泛型方法 
示例:

1 public static ResultDTO<?> entity(int code,Object... data) {
2     ResultEnum resultEnum = ResultEnum.getEnum(code);
3     if(0==data.length) {
4         return new ResultDTO<ResultEnum>(resultEnum);
5     }else{
6         return new ResultDTO<Object>(resultEnum,data);
7     }
8 }

通配符之邊界

為什么通配符要加邊界

為了解決容器中存儲的元素不能是該基類(父類)的子類

上界通配符

關鍵字:extends
禁止做插入操作,只做讀取
最大只能是該基類父類)的子類

 

下界通配符

關鍵字:super
最小只能是該子類,不能是該類的子類 
無法確定存入類型,可以插入操作,而無法讀取操作
Apple 繼承 FruitFruit 繼承 Food

 1 public static ResultDTO<? super Fruit> entity(int code,Object... data) {
 2     ResultEnum resultEnum = ResultEnum.getEnum(code);
 3     if(0==data.length) {
 4         return new ResultDTO<Food>(resultEnum);
 5     }if(1==data.length) {
 6         return new ResultDTO<Fruit>(resultEnum);
 7     }else{
 8         return new ResultDTO<Apple>(resultEnum,data);//報錯
 9     }
10 }

報錯

Type mismatch: cannot convert from ResultDTO<Apple> to ResultDTO<? super Fruit>

PECS原則

Producer Extends Consumer Super原則

  1. extends 推薦讀操作
  2. super 推薦寫操作

  1. 聲明泛型不能用無邊界通配符<?>
  2. 上界<? extends T>不能往里存,只能往外取
  3. 下界<? super T>不影響往里存,但往外取只能放在Object對象里


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM