目录
泛型定义
泛型(Generics)是在JDK1.5中推出的,其主要目的是可以建立具有类 型安全的集合框架,如链表、散列映射等数据结构。
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢? 顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参), 然后在使用/调用时传入具体的类型(类型实参)。 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中, 操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
泛型的优点
Java泛型的主要目的是可以建立具有类型安全的数据结构,如链表、散列表等数据结构,最重要的一个优点就是:在使用这些泛型类建立的数据结构时,不必进行强制类型转换,即不要求进行运行时类型检查。JDK1.5是支持泛型的编译器,它将运行时的类型检查提前到编译时执行,使代码更安全。Java推出泛型的主要目的是为了建立具有类型安全的数据结构,如链表、散列映射等。
泛型的使用
泛型类
- 泛型类概述:把泛型定义在类上
- 定义格式:class 名称<泛型列表>
public class 类名 <泛型类型1,...> {
}
复制代码
- 使用泛型类声明对象
- 定义格式:
Cone<Circle> coneOne;
coneOne =new<Circle>(new Circle());
泛型接口
- 泛型接口概述:把泛型定义在接口
- 定义格式:
public interface 接口名<泛型类型> {
}
复制代码
泛型方法
- 泛型方法概述:把泛型定义在方法上
- 定义格式:
public <泛型类型> 返回类型 方法名(泛型类型 变量名) {
}
复制代码
泛型通配符
常用T,E,K,V,?
? 表示不确定的 java 类型
T (type) 表示具体的一个java类型
K V (key value)
分别代表java键值中的Key Value
E (element) 代表Element
<? extends T> 上界通配符
<? extends T>表示的是类型的上界【包含自身】,因此通配的参数化类型可能是T或T的子类。
使用关键字extends来实现,实例化时,指定类型实参只能是extends后类型的子类或其本身。
这样就确定集合中元素的类型,虽然不确定具体的类型,但最起码知道其父类。然后进行其他操作。
//Cat是其子类
List<? extends Animal> list = new ArrayList<Cat>();
复制代码
<? super T> 下界通配符
下界通配符<? super T>表示的是参数化类型是T的超类型(包含自身),层层至上,直至Object
使用关键字super来实现,实例化时,指定类型实参只能是extends后类型的子类或其本身
//Animal是其父类
List<? super Cat> list = new ArrayList<Animal>();
复制代码