泛型
泛型高级进阶一:泛型的基本使用
泛型高级进阶二:泛型的高级使用
文章目录
- 泛型
- 泛型高级进阶一:泛型的基本使用
- 泛型高级进阶二:泛型的高级使用
- 什么是泛型
- 为什么使用泛型
- 泛型的使用方法
- 1.泛型的引用方式
- 2.泛型的参数
- 3.泛型的参数定义
- 4.泛型的The Diamond钻石运算符
- 5.受限的类型参数(泛型继承和实现)
什么是泛型
Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制
- 该机制允许程序员在编译时检测到非法的类型
- 泛型的本质是参数类型,也就是说所操作的数据类型被指定为一个参数
- 泛型不存在于JVM虚拟机
为什么使用泛型
- 泛型可以增强编译时错误检测,减少因类型问题引发的运行时异常
- 泛型具有更强的类型检查
- 泛型可以避免类型转换
- 泛型可以泛型算法,增加代码复用性
泛型的使用方法
1.泛型的引用方式
1、泛型类格式:
class name<T1, T2, ..., Tn>
2、泛型方法格式:
private <K,V> boolean compare(Pair<K,V> p1, Pair<K,V> p2)
3、调用格式:
Util.<K, V>compare(p1,p2)
2.泛型的参数
1、最常见的类型变量名有:
E:元素(在Java集合框架中有广泛的应用)
K:键
N:数字
T:类型
V:值
2、其他可用参数
S,U,V 等:第二,第三,第四个类型
3.泛型的参数定义
1、泛型的基本参数定义
Foo<T>中整个成为泛型类型
Foo<T>中的T为类型参数
Foo<String>中的String为类型变量,也可以称为实际类型参数
4.泛型的The Diamond钻石运算符
- JDK7以下版本
Box<Integer> integerBox = new Box<Integer>();
- JDK7及以上版本
Box<Integer> integerBox1 = new Box<>();// The Diamond(菱形) 类型推断
5.受限的类型参数(泛型继承和实现)
1、定义
- 功能:对泛型变量的范围作出限制
- 算法实现:关键就是利用受限类型参数
- 格式: extends表达的意义:这里指的是广义上“扩展”,兼有“类继承”和“接口实现”之意
2、单一限制:单独继承Number
例如:U继承Number实现
<U extends Number>
3、多种限制:
多种限制下的格式语法要求:如果上限类型是一个类,必须第一位标出,否则编译错误
例如:A是继承,B和C是接口
<U extends A & B & C>
4、继承关系容易误解的地方:
- 泛型的参数存在继承关系并不属于泛型继承
Box<Number>与Box(Interger)
如下图:虽然Interger继承Number,但是box与Box(Interger)没有任何关系,它们均继承Object,
- 存在继承关系的原则:class之间存在继承关系,且子class与父class需含至少一个相同的泛型
如下图:ArrayLIst与List是继承关系,且存在相同的String泛型参数
PayLoadList与List存在继承参数,且至少存在一个String泛型参数