【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


相关文章
|
1天前
|
Web App开发 JavaScript 测试技术
《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
【5月更文挑战第9天】本文介绍了在Appium中处理App自动化测试中遇到的Toast元素定位的方法。Toast在Web UI测试中也常见,通常作为轻量级反馈短暂显示。文章提供了两种定位Toast元素的技巧.
10 0
|
2天前
|
存储 安全 算法
【常见集合】Java 常见集合重点解析
【常见集合】Java 常见集合重点解析
6 0
|
2天前
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
51 3
|
2天前
|
前端开发 Java Spring
Java Web ——MVC基础框架讲解及代码演示(下)
Java Web ——MVC基础框架讲解及代码演示
12 1
|
2天前
|
设计模式 前端开发 网络协议
Java Web ——MVC基础框架讲解及代码演示(上)
Java Web ——MVC基础框架讲解及代码演示
6 0
|
2天前
|
Java 关系型数据库 MySQL
【Java Spring开源项目】新蜂(NeeBee)商城项目运行、分析、总结
【Java Spring开源项目】新蜂(NeeBee)商城项目运行、分析、总结
13 4
|
2天前
|
安全 Java 编译器
java泛型浅谈
java泛型浅谈
6 1
|
2天前
|
存储 Java Maven
Maven 构建 Java 项目
使用 Maven 的 `maven-archetype-quickstart` 插件在 `C:\MVN` 创建 Java 应用项目 `consumerBanking`,命令行参数包括 `-DgroupId`, `-DartifactId` 和 `-DarchetypeArtifactId`。项目包含 src/main/java 和 src/test/java 目录,分别存放 Java 代码和测试代码,以及 src/main/resources 用于存储资源文件。默认生成的 `App.java` 和 `AppTest.java` 分别为应用主类和测试类。
|
2天前
|
Go
golang学习3,golang 项目中配置gin的web框架
golang学习3,golang 项目中配置gin的web框架
|
2天前
|
移动开发 前端开发 Java
STS里的java 工程项目名称修改和目录设置成源代码
STS里的java 工程项目名称修改和目录设置成源代码