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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
}

使用泛型

<?>
使用一个泛型类或者泛型方法
示例:

1
2
3
4
5
6
7
8
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
禁止做插入操作,只做读取
最大只能是该基类父类)的子类

1
2
3
4
5
6
7
8
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 继承 FruitFruit 继承 Food

1
2
3
4
5
6
7
8
9
10
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>

PECS原则

Producer Extends Consumer Super原则

  1. extends 推荐读操作
  2. super 推荐写操作

  1. 声明泛型不能用无边界通配符<?>
  2. 上界<? extends T>不能往里存,只能往外取
  3. 下界<? super T>不影响往里存,但往外取只能放在Object对象里

参考文献

知乎问答
知乎问答

今日诗词

作者信息