【java集合】结合web项目对泛型的理解

一、泛型

   关于泛型的概念,请参考博客:https://www.cnblogs.com/MrZhang1/p/7261232.html
   举个例子:人类在不断向文明进化的过程中,创造了洗手间,本意是让大家文明生活。但有一天,当男人和女人同时进了一个洗手间,不好的事情就发生了。。恩。。呃。。,各位自行想象。本来建个洗手间是方便大家生活的,结果还制造了更大的麻烦。肿么办?!
   建两个洗手间:男洗手间和女洗手间;规定,男人只能进男洗手间,女人只能进女洗手间。
   泛型也经过了一个这样演化的过程:“ 从Java 5开始,引入了参数化类型(Parameterized Type)的概念,改造了所有的Java集合,使之都实现泛型,允许程序在创建集合时就可以指定集合元素的类型,比如List<String>就表名这是一个只能存放String类型的List”


二、语法和使用

1、使用具体的泛型类型: 尖括号内带有具体的类型。
List<String> strList = new ArrayList<>();


2、方法声明的时候:public  <T> T getValue(){...}

   比如我们常用的Web项目中,泛型是修饰类型的,在方法上,一般就是返回值和参数列表

   返回值类型:可以定义为List<String>等形式,但是实际开发中,一般都是不知道具体类型,定义形式如下  <T> List<T> test(T t){...} ,前边的<T>可以理解为泛型的声明,只有声明了T,你才可以在方法中用到T,这一具体的类型, List<T>是具体的返回值类型。

  方法传参:可以用占位符限定的容器 比如 List<T>,或者直接是占位符 T。

  比如我们在使用工具类时,有将json转化为对象,我们可能将json转化为各种类型的对象,为了提高代码的复用性,我们使用工具类,将json转为T对象,到具体业务中再强转;

/**
     * 将json结果集转化为对象
     *
     * @param jsonData json数据
     * @param beanType 对象中的object类型
     * @return
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) throws IOException {
        T t;
        try {
            t = OBJECT_MAPPER.readValue(jsonData, beanType);
        } catch (IOException e) {
            throw e;
        }
        return t;
    }
3、类或者接口使用泛型  interface Collection<V> {..}
在真正的项目上,一些基础的公共类经常定义泛型,如下:
public interface GenericDao<T, ID extends Serializable> {
   public abstract void saveOrUpdate(T t) throws DataAccessException;  // 更新操作
   public abstract T get(ID id) throws DataAccessException;   //查询方法
}   

三、注意

    Java会在编辑期把泛型擦除掉,在JAVA的虚拟机中并不存在泛型,泛型只是为了完善java体系,增加程序员编程的便捷性以及安全性而创建的一种机制,在JAVA虚拟机中对应泛型的都是确定的类型,在编写泛型代码后,java虚拟中会把这些泛型参数类型都擦除,用相应的确定类型来代替,代替的这一动作叫做类型擦除,而用于替代的类型称为原始类型,在类型擦除过程中,一般使用第一个限定的类型来替换,若无限定,则使用Object。
    关于泛型的知识还有很多,小编就不在这里一一讲解了。
    参考博客:https://www.cnblogs.com/ldh-better/p/7127308.html#_label1

猜你喜欢

转载自blog.csdn.net/wkx18330698534/article/details/80646281
今日推荐