16、泛型
概念
- 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型
- Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作 为参数传递。
- T 占位符 表示一种引用数据类型
- 参数化类型、类型安全的集合,强制集合元素的类型必须一致。
特点
- 编译时即可检查,而非运行时抛出异常。
- 访问时,不必类型转换(拆箱)。
- 不同泛型之间引用不能相互赋值,泛型不存在多态。
- 泛型不能被实例化
注意:
- 1.不能使用t实例化对象
- 2.不能使用不同的泛型作为方法重载的依据
- jdk1.7之后 实例化泛型对象可以省略类型 <>钻石语法 diamond
泛型方法
-
简单定义
- public static T show(T t)
-
规则
- 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前。
- 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
- 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
- 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)。
泛型类
-
泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开
-
一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符
-
因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型
-
例子
- public class Box {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
}
- public class Box {
泛型接口
类型通配符
-
类型通配符一般是使用?代替具体的类型参数
- List<?>在逻辑上是List>,List 等所有List<具体类型实参>的父类
-
类型通配符上限
- List<? extends Number>如此定义就是通配符泛型值接受Number及其下层子类类型
-
类型通配符下限
- List<? super Number>表示类型只能接受Number及其三层父类类型
好处
- 提高代码的重用性
- 防止类型转换异常,提高代码的安全性