泛型,即”参数化类型“,把类型当作参数一样传递。这种参数类型可以用在类、接口、和方法中,分别被称为泛型类、泛型接口、泛型方法。我们一般常用的泛型类型变量:T、E、K、V
泛型类定义:
public class MyClass{
private T data;
public MyClass(){
}
public MyClass(T data){
this();
this.data=data;
}
}
泛型接口定义:
public interface MyInterface{
public T next();
}
public class ImplMyInterface implements MyInterface{
@Override
public String next(){
return "OK";
}
}
泛型方法定义:
public class MyClass{
private T data;
public MyClass(){
}
public MyClass(T data){
this();
this.data=data;
}
//下边的为普通方法
public T getData(){
retrun data
}
//下边的为泛型方法
public T method(T element){
return element
}
}
泛型中使用extends,是规定我们的泛型类型的类型范围,如果试图传入一个不相符的类型,将会发生编译错误
public static T min(T a,T b){
if(a.compareTo(b)>0)return b; else return a;
}
public static T max(T a,T b){
if(a.compareTo(b)>0)return a; else return b;
}
extends 左右都允许有多个,如T,V extends Comparable & Serializable
泛型的extends用于继承和实现,多实现可以用&拼接,如果实现的是具体的类,如List,需要放在第一的位置,只允许实现一个具体的类
泛型中是不允许使用instanceof 进行判断的
常用的通配符有? extends、? super、?
通配符 ? extends A 代表上界,最多只能继承到A
通配符 ? super A 代表下界,只允许继承A的超类,下限只能继承到A,A的子类不允许继承了
通配符 ? super A 使用Set方法时,只允许set本身以及子类,不允许set超类
通配符 ?