Java高级特性-泛型

66 阅读2分钟

泛型: 是 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;
    }
}

不积跬步无以至千里, 知识积累