泛型
什么是泛型
泛型将接口的概念进一步延伸,“泛型”的字面意思就是广泛的类型。类、接口和方法代码可以应用于非常广泛的类型,代码与它们能够操作的数据类型不再绑定在一起,同一套代码可以用于多种数据类型,这样不仅可以复用代码,降低耦合性,而且还提高了代码的可读性以及安全性。
泛型的本质
泛型,即”参数化类型”或者”类型参数化”。
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,我们要操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
泛型的好处
- 编译期间即确定类型
- 保证类型安全,避免强制类型转换异常同时也规避了强制类型转换带来的问题
- 代码利于重用,增加通用性
泛型的类型擦除
泛型只在编译阶段有效,泛型类型在逻辑上可看成是多个不同的类型,但是其实质都是同一个数据类型
编译之后程序会采取去泛型化的措施
在编译之后程序会采取去泛型化的措施。也就是说Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。
泛型通配符
无边界通配符
无边界通配符 ?
上界通配符
上界通配符 <? extends E>
下界通配符
下届通配符 <? super E>
泛型的使用
泛型跟我们的成员属性一样,需要先声明才能使用.泛型的声明采用 <> 进行声明
申明一般约定采用单个大写字母表示.常用的有 K E T V 等等字符
泛型类
泛型类一般指泛型的定义与类名一起.在创建实体对象时,指定泛型的类型
通过泛型类,我们可以提升我们程序固定逻辑的灵活度
泛型方法
方法的泛型有两种:
实体方法:
实体方法可以使用在类中定义的泛型或者方法中定义的泛型.
静态方法:
不可以使用在类中定义的泛型,只能使用在静态方法上定义的泛型.
泛型接口
指在接口的定义时进行泛型的申明.
接口是标准的指定者,指实现该接口的类必须实现其标准定义(即抽象方法).
所以在接口上进行泛型的申明,或者说使用泛型接口,可以让我们的程序代码更加简洁,更加多变.
可以大大的提升代码的复用和改善程序的灵活度