<?>
指的是Object及其子类,也就是所有Java对象
<E>
:Element (容器中的元素,如集合)
<T>
:Type(Java 类)
<K>
:Key(键)
<V>
:Value(值)
<N>
:Number(数值类型)
<S>
、< U>
、 <A>
、 <B>
….
<T>
声明一个泛型类或者泛型方法
示例:
public class ResultDTO<T> implements Serializable{ private static final long serialVersionUID = 801125677591974439L; private int code; private String msg; @JsonInclude(JsonInclude.Include.NON_DEFAULT) private Object data; private ResultDTO(ResultEnum stateEnum, Object data) { this.code = stateEnum.getCode(); this.msg = stateEnum.getMsg(); this.data = data; }; //setter //getter }
<?>
使用一个泛型类或者泛型方法
示例:
public static ResultDTO<?> entity(int code,Object... data) { ResultEnum resultEnum = ResultEnum.getEnum(code); if(0==data.length) { return new ResultDTO<ResultEnum>(resultEnum); }else{ return new ResultDTO<Object>(resultEnum,data); } }
为了解决容器中存储的元素不能是该基类( 父类
)的 子类
。
关键字:
extends
禁止做插入操作,只做读取
最大只能是该 基类
( 父类
)的 子类
public static ResultDTO<? extends Object> entity1(int code,Object... data) { ResultEnum resultEnum = ResultEnum.getEnum(code); if(0==data.length) { return new ResultDTO<ResultEnum>(resultEnum); }else{ return new ResultDTO<Object>(resultEnum,data); } }
关键字:
super
最小只能是该 子类
,不能是该类的 子类
无法确定存入类型,可以插入操作,而无法读取操作
Apple
继承 Fruit
, Fruit
继承 Food
public static ResultDTO<? super Fruit> entity(int code,Object... data) { ResultEnum resultEnum = ResultEnum.getEnum(code); if(0==data.length) { return new ResultDTO<Food>(resultEnum); }if(1==data.length) { return new ResultDTO<Fruit>(resultEnum); }else{ return new ResultDTO<Apple>(resultEnum,data);//报错 } }
报错
Type mismatch: cannot convert from ResultDTO<Apple> to ResultDTO<? super Fruit>
extends super
<?>
[List<?>和List