泛型
泛型
泛型是一种未知的,不确定的数据类型。
泛型之间是没有继承关系的。 比如:ArrayList
如果在定义类的时候,类名后面写上
,就表示在类的范围内定义了一个泛型类型T(不确定的数据类型T) 这种未知的类型T等到我们使用这个类的时候就会被确定出来。
这个T可以使用其他字母代替。
泛型好处:
省略了向下转型的代码。
将运行时期的问题提前到了编译时期。
泛型擦除
Java中的泛型都是伪泛型,泛型只在源代码阶段有效,一旦编译,泛型就会消失。
泛型方法
泛型方法的定义格式: 修饰符 <泛型> 返回值类型 方法名(参数列表) { 方法体; return 返回值; } 在方法上定义的泛型,需要等到调用方法的时候才能确定。
public class Factory<T> {
/*
定义方法,接收什么类型的参数,就得到什么类型的结果
*/
public <E> E getSame(E e) {
return e;
}
}
泛型通配符
如果想要接受任何类型类型的泛型,可以使用泛型通配符 ?表示泛型通配符,可以匹配任何类型的泛型。
泛型通配符要放在方法参数位置被动匹配, 不要主动使用。
泛型限定
如果限制泛型通配符的取值范围,那么可以使用泛型限定。
格式:
<? extends A>:泛型要么是A类,要么是A类的子类。 上限。
<? super A>: 泛型要么是A类,要么是A类的父类。 下限。