泛型: 是 JDK 5 中引入的一个新特性。它允许我们通过预先定义模板,为多种不同的数据类型执行相同的逻辑,可以实现更好的代码复用。编译器实现了对泛型参数进行检测,并且运行我们通过泛型参数来指定传入的对象类型,比如:ArrayList list = new ArrayList()就指定了这个 ArrayList 中只能存放 Integer 对象,如果传入其他类型的对象就会报错。
泛型的作用: 可以多种数据类型执行一套相同的代码,简化了代码。
泛型有三种使用方式: 泛型类、泛型接口、泛型方法。常用的是泛型方法
泛型通配符: 我们定义泛型时,经常碰见T,E,K,V,?等通配符,是编码时一种约定俗成的东西。当然,你换个A-Z中另一个字母表示没有关系,但是为了可读性,一般有以下定义:
- ? 表示不确定的 java 类型
- T (type) 表示具体的一个java类型
- K V (key value) 分别代表java键值中的Key Value
- E (element) 代表Element
泛型的通配符通常是可以指定边界的:
- 无边界通配符,如List<?> : 就是没有任何限定。
- 上边界限定通配符,如<? extends E> : extends关键字表示这个泛型中的参数必须是 E 或者 E 的子类
- 下边界通配符,如<? super E>: super关键字表示这个泛型中的参数必须是所指定的类型E,或者是此类型的父类型,直至 Object。
/**
* do转换为Dto数组工具类
*/
public static <T> List<T> doTransfer(List<?> sourceEntityList, Class<T> targetClass) {
try {
List<T> objects = new ArrayList<>();
for (Object object : sourceEntityList) {
T newInstance = targetClass.newInstance();
BeanUtils.copyProperties(object, newInstance);
objects.add(newInstance);
}
// Dto转换Do
return objects;
} catch (Exception e) {
return null;
}
}
不积跬步无以至千里, 知识积累