通配符是什么
<?>
指的是Object及其子類,也就是所有Java對象
泛型是什么
<E>
:Element (容器中的元素,如集合)<T>
:Type(Java 類)<K>
:Key(鍵)<V>
:Value(值)<N>
:Number(數值類型)<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
繼承 Fruit
,Fruit
繼承 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原則
extends
推薦讀操作super
推薦寫操作
注
- 聲明泛型不能用無邊界通配符
<?>
- 上界<? extends T>不能往里存,只能往外取
- 下界<? super T>不影響往里存,但往外取只能放在Object對象里