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

简介: 【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


相关文章
|
6天前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
22 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
11天前
|
中间件 Go API
Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
37 1
|
15天前
|
Java Android开发
Eclipse 创建 Java 项目
Eclipse 创建 Java 项目
35 4
|
21天前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
|
19天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
25 2
|
23天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
18天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
21天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
34 3
|
23天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
47 4
|
23天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。