java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java之泛型使用过程

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

作者: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是否是桥接方法。

总结

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

您可能感兴趣的文章:
阅读全文