JAVA泛型
一、什么是泛型
- 概念:Java泛(generics)是JDK5中引入的一个新特性,泛型提供了编译时类的安全监测机制,该机制允许我们在编译时检测到非法的泛型数据结构。 泛型的本质是参数化类型,也就是所操作的数据类型被指定为一个参数。
- 意义:类型安全, 消除强制类型转换。
二、泛型类、接口
泛型类(接口)
- 定义语法:
class 类型名 <泛型标志,泛型标识,...> {
private 泛型标识 变量名;
...
}
- 常用泛型标识:T 、 E 、 K 、 V、 S ? …
- 使用语法:
类名<具体的数据类型> 变量名 = new 类名<具体的数据类型>();
JDK7以后,后面的<具体数据类型>可以省略.
-
注意事项:
-
泛型类,如果没有指定具体的数据类型,操作类型默认Object
-
泛型的类型参数只能是类类型,不能是基本类型
-
泛型类型在逻辑上可以看成可以代表多个不同类型,但是同一个
三、泛型方法
泛型类是实例化时指定数据类型,泛型方法是被调用时指定数据类型。
- 定义语法:
修饰符 <泛型标识,...> 返回值类型 方法名(形参列表){
方法体
}
- 其他基本与泛型类相似
四、类型通配符
就一个:?
- 类型通配符一般时使用问号代替具体的类型实参;
- 类型通配符时类型实参,而不是形参
上限:类/接口 <? extends 实参类型>
必须是实参类型或它的子类
下限:类/接口 <? super 实参类型>
必须是实参类型或它的父类
五、类型擦除
-
概念:泛型时JDK1.5引进的,之前没有,但泛型却能和之前版本很好的兼容。原因是泛型信息只存在于代码编译阶段,在进入JVM之前,与泛型相关的信息会被擦除,即类型擦除。
-
无限制的类型擦除
-
有限制的类型擦除
-
方法中的类型擦除
-
桥接方法