概述:
1、可以在类或方法中预支地使用未知的类型。
2、参数化类型
3、泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)
注意:泛型只在编译阶段有效!
1、泛型参数不是是基础数据类型
使用:
泛型有三种使用方法:泛型类、泛型接口、泛型方法(泛型可变参数)
// 泛型类
public class GenericClass<T>{
private T key;
public T getKey(){
return key;
}
public void setKey(T t){
this.key = t;
}
}
// 泛型方法
public class GenericMethod{
public static <T> T method(T t1){
return t1;
}
// 可变参数
public <T> void method(T... args){
for(T item : args){
...;
}
}
}
//泛型接口
public interface GenericInterface<T>{
T method();
}
泛型通配符:
类型通配符一般是使用?代替具体的类型实参,注意了,此处’?’是类型实参,而不是类型形参 。
泛型上下边界:
在使用泛型的时候,我们还可以为传入的泛型类型实参进行上下边界的限制,如:类型实参只准传入某种类型的父类或某种类型的子类。
上边界:
设置泛型对象的上限使用extends,表示参数类型只能是该类型或该类型的子类:
声明对象:类名<? extends 类> 对象名
定义类:类名<泛型标签 extends 类>{}
下边界:
设置泛型对象的下限使用super,表示参数类型只能是该类型或该类型的父类:
声明对象:类名<? super 类> 对象名称
定义类:类名<泛型标签 extends类>{}