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对象里
posted @ 2018-12-14 14:41  工程师搁浅  阅读(955)  评论(0编辑  收藏  举报