Java泛型

一、什么是泛型?

           泛型我理解为,即你不确定当前传入的参数和返回的参数的类型时使用的一个“占位符”

 例如:当你提取一个公用方法或称为工具类的方法时,你需要传入一个参数,但你并不能把参数的类型写“死”,不然就起不到工具类的作用。就像下面这样

/**
*我需要通过反射来获取一个实体类的所有属性并给它属性赋值
*
*T object       是我需要封装的实体类
*String[] data  是赋给实体类每个属性对应的值
*/
public T setProperties(T object, String[] data){
    Field[] fields = entity.getClass().getDeclaredFields();
            for (int i = 0; i < fields.length; i++) {
                fields[i].setAccessible(true);
                String type = fields[i].getAnnotatedType().toString();//获取每个属性的类型,并转换为String类型
                if (type.endsWith("String")) {
                    fields[i].set(entity, datas[i]);
                } else if (type.endsWith("Date")) {
                    if (!datas[i].equals("")) {
                        fields[i].set(entity, DateUtils.parse(datas[i], Constants.DATE_FORMAT_YYYYMMDDHHMM_ISO));//是日期类型,通过工具类转换为我想要的日期格式
                    } else {
                        fields[i].set(entity, null);
                    }
                } else if (type.endsWith("long")) {
                    if (!datas[i].equals("")) {
                        fields[i].set(entity, Long.parseLong(datas[i]));
                    } else {
                        fields[i].set(entity, 0);
                    }
                }
            }
} 

当然我之前也有个疑问那就是,泛型会被编译器会擦除,并将泛型替换为Object,那为什么我们不直接用Object呢? 

   后来看到一个帖子解开了我的疑惑,其实也是对语法不熟悉导致的。如果像这样List a = new ArrayList<>();那么这个集合你可以添加任何类型数据,但如果用泛型,你一旦添加了第一个数据,那么集合能够存储的类型就已经决定了

你可能感兴趣的:(笔记)