Java之泛型在使用过程全解析

 更新时间:2025年09月05日 16:37:21   作者:ByteBlossom  
这篇文章介绍了泛型的基本概念及其在Java中的应用,泛型通过统一类型参数消除了强转问题,广泛应用于集合类(如List、Set、Map)中,确保元素类型一致,文章还详细解释了泛型类、泛型方法、子类继承、类型限制(上限和下限)、泛型擦除以及桥接方法等关键概念

什么是泛型?

早期Java是使用Object来代表任意类型的,但是向下转型有强转的问题,这样程序并不安全。针对List、Set、Map等集合类型,它们对存储的元素类型是没有任何限制的。

假如向List中存储Dog类型的对象,但是有人把Cat对象也存储到这个List中了,那么在编译上是没有任何语法错误的。所有使用该泛型参数的地方都被统一化,保证类型一致。

如果未指定具体类型,默认是Object类型。集合体系中的所有类都增加了泛型,泛型也主要用在集合。

下面我们就针对泛型类、泛型方法、泛型类派生出的子类、类型通配符、泛型擦除、桥接方法等内容进行一一介绍。

泛型类

泛型类就是把泛型定义在类上,用户使用该类的时候,才把类型明确下来

这样的话,用户明确了什么类型,该类就代表着什么类型,用户在使用的时候就不用担心强转的问题,和运行时转换异常的问题了,如下所示:

泛型方法

除了在类上使用泛型,我们可能仅仅在某个方法上需要使用泛型,外界仅仅是关心该方法,不关心类其他的属性,这样的话,我们在整个类上定义泛型,未免就有些大题小作了。那么此时,我们可以采用泛型方法。

泛型类派生出的子类

前面我们已经定义了泛型类,泛型类是拥有泛型这个特性的类,它本质上还是一个Java类,那么它就可以被继承或实现。这里分两种情况:

  • ①子类明确泛型类的类型参数变量

  • ②子类不明确泛型类的类型参数变量

我们创建一个Inter接口,在该接口上使用泛型,代码如下所示:

类型通配符

List<?>表示元素类型未知的List,它可以匹配任何类型的元素。

声明List<?>后,不能向集合中添加元素,因为无法确定集合的元素类型,唯一例外的是null。

泛型的上限和下限

泛型的上限:

格式:类型名称<?extends 类>对象名称

意义: 只能接收该类型及其子类

泛型的下限:

格式:类型名称<?super类>对象名称

意义:只能接收该类型及其父类型

类型擦除

泛型是提供给javac编译器使用的,它可以作为类型的限制,让编译器在源代码级别上,挡住非法类型的数据。

但是在JDK1.5之前没有泛型的概念,为了能够与之前版本代码兼容,编译器编译完带有泛型的java程序后,生成的class字节码文件中将不再带有泛型信息,这个过程称为“擦除”。

桥接方法的作用是什么?

桥接方法是jdk1.5引入泛型后,为使java泛型方法生成的字节码与jdk1.5版本之前的字节码兼容由编译器自动生成的。可用 method.isBridge() 判断method是否是桥接方法。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java并发编程中的synchronized关键字详细解读

    Java并发编程中的synchronized关键字详细解读

    这篇文章主要介绍了Java并发编程中的synchronized关键字详细解读,在Java早期版本中,synchronized 属于 重量级锁,效率低下,这是因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,Java 的线程是映射到操作系统的原生线程之上的,需要的朋友可以参考下
    2023-12-12
  • BootStrap Jstree 树形菜单的增删改查的实现源码

    BootStrap Jstree 树形菜单的增删改查的实现源码

    这篇文章主要介绍了BootStrap Jstree 树形菜单的增删改查的实现源码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • SpringBoot拦截器以及源码详析

    SpringBoot拦截器以及源码详析

    拦截器在我们平时的项目中用处有很多,如:日志记录(我们后续章节会讲到)、用户登录状态拦截、安全拦截等等,所以下面这篇文章主要给大家介绍了关于SpringBoot拦截器以及源码的相关资料,需要的朋友可以参考下
    2021-07-07
  • mybatisPlus实现倒序拼接字符串

    mybatisPlus实现倒序拼接字符串

    这篇文章主要介绍了mybatisPlus实现倒序拼接字符串方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java8不可或缺小帮手之日期应用

    Java8不可或缺小帮手之日期应用

    jdk1.8后引入了新的日期时间处理API,相比传统的date操作更加简便,date中的SimpleDateFormat也是非线程安全的,废话不多说,开干
    2023-05-05
  • Java后端返回PDF预览给前端的实现

    Java后端返回PDF预览给前端的实现

    前端要预览服务器PDF 可直接将要blob流返回给前端,即可用浏览器自带pdf预览功能打开,本文就来介绍一下如何实现,感兴趣的可以了解一下
    2023-09-09
  • MyBatis中的连接池及事物控制配置过程

    MyBatis中的连接池及事物控制配置过程

    连接池就是用于存储数据库连接的一个容器,容器其实就是一个集合对象,本文给大家介绍MyBatis中的连接池以及事物控制的相关知识,感兴趣的朋友一起看看吧
    2021-05-05
  • 关于idea中SpringBoot启动失败的坑

    关于idea中SpringBoot启动失败的坑

    这篇文章主要介绍了关于idea中SpringBoot启动失败的坑,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 利用微信小程序+JAVA实现微信支付的全过程

    利用微信小程序+JAVA实现微信支付的全过程

    微信支付是一种在线支付解决方案,允许用户通过微信内的支付功能进行付款,下面这篇文章主要给大家介绍了关于利用微信小程序+JAVA实现微信支付的相关资料,需要的朋友可以参考下
    2024-08-08
  • 配置化Feign接口动态切换URL方式

    配置化Feign接口动态切换URL方式

    本文介绍了在开发、测试和生产环境中使用Feign接口时,根据不同的环境动态切换调用URL的方法,通过在不同环境的配置文件中配置URL,并实现一个Feign拦截器来读取这些配置,从而实现URL的动态切换,这种方法避免了引入过多步骤,同时也保证了不同环境下的URL正确调用
    2024-11-11

最新评论