<?>
指的是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