【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


相关文章
|
8天前
|
Java
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
本文介绍了如何使用IDEA(IntelliJ IDEA)创建一个新的Java项目,并运行一个简单的Java程序输出"Hello Word"。文章详细展示了创建项目的步骤,包括选择JDK版本、设置项目名称和路径、创建包和类,以及编写和运行代码。最后,还展示了如何通过IDEA的运行功能来执行程序并查看输出结果。
29 4
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
|
16天前
|
Java 编译器 容器
Java——包装类和泛型
包装类是Java中一种特殊类,用于将基本数据类型(如 `int`、`double`、`char` 等)封装成对象。这样做可以利用对象的特性和方法。Java 提供了八种基本数据类型的包装类:`Integer` (`int`)、`Double` (`double`)、`Byte` (`byte`)、`Short` (`short`)、`Long` (`long`)、`Float` (`float`)、`Character` (`char`) 和 `Boolean` (`boolean`)。包装类可以通过 `valueOf()` 方法或自动装箱/拆箱机制创建。
24 9
Java——包装类和泛型
|
19天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
6天前
|
前端开发 Python
前后端分离的进化:Python Web项目中的WebSocket实时通信解决方案
在现代Web开发领域,前后端分离已成为一种主流架构模式,它促进了开发效率、提升了应用的可维护性和可扩展性。随着实时数据交互需求的日益增长,WebSocket作为一种在单个长连接上进行全双工通讯的协议,成为了实现前后端实时通信的理想选择。在Python Web项目中,结合Flask框架与Flask-SocketIO库,我们可以轻松实现WebSocket的实时通信功能。
18 2
|
8天前
|
算法 Java
Java项目不使用框架如何实现限流?
Java项目不使用框架如何实现限流?
19 2
|
8天前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
13 2
|
16天前
|
存储 安全 搜索推荐
Java中的泛型
【9月更文挑战第15天】在 Java 中,泛型是一种编译时类型检查机制,通过使用类型参数提升代码的安全性和重用性。其主要作用包括类型安全,避免运行时类型转换错误,以及代码重用,允许编写通用逻辑。泛型通过尖括号 `&lt;&gt;` 定义类型参数,并支持上界和下界限定,以及无界和有界通配符。使用泛型需注意类型擦除、无法创建泛型数组及基本数据类型的限制。泛型显著提高了代码的安全性和灵活性。
|
29天前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
27天前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
34 0
|
2月前
|
Java Maven Android开发
解锁Web开发新技能:从零开始的Struts 2之旅——让你的Java编程之路更加宽广,首个应用实例带你飞!
【8月更文挑战第31天】对于初学者,掌握 Struts 2 框架不仅能提升 Web 开发能力,还能深入了解 MVC 架构。Struts 2 是一个基于 Servlet 的 Java 框架,提供表单验证、文件上传、国际化等功能,便于快速构建易维护的 Web 应用。本文通过示例演示如何从零开始搭建环境并创建一个简单的 Struts 2 项目,包括配置 `struts.xml`、编写 Action 类及视图文件,并配置 web.xml。通过这些步骤,你将学会基本的开发流程,为进一步学习高级功能打下基础。
34 0
下一篇
无影云桌面