Java 泛型
一、什么是泛型
泛型是Java SE 1.5增加的特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
二、泛型的作用
Java引入泛型的目的是为了类型安全。泛型可以将运行时的错误提前到编译时的错误。
Java 语言中的泛型基本上完全在编译器中实现,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种实现技术称为 擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除)。
三、泛型的定义
1、修饰类或接口,放在类或接口名后面
public class TestClassDefine<T, S extends T>{}
2、修饰方法,放在作用域限定符(public、private等)后面
public <T, S extends T> T testGenericMethodDefine(T t, S s){}
四、泛型的特点
1、使用泛型T,因为不知道T的具体类型,也就不知道T中包含什么属性和方法,也就不能在定义泛型类、接口、方法的时候调用T的属性和方法等信息。
2、泛型可以使用继承等修饰符:<T, S extends T> 、<T extends Collection>等
3、可以使用通配符<? extends ClassName>
-
- 在使用泛型类、接口、方法时,如果不知道要传入什么类型的值时,可以使用<? extends ClassName>,表示ClassName对应的子类都可以。
- 也可以直接使用<?>,表示<? extends Object>。
- 当然,使用了通配符后,在使用?表示的成员时,因为不知道是哪个类,所以可以调用的属性或方法会受到相应的限制。