一:泛型分三类:
1 类上的泛型、2接口上的泛型、3 泛型方法
二:什么时候用?
如果你写两套代码,处理流程几乎一模一样,只是针对的数据的类型不一样,就可以考虑“只写一遍”,而不是两遍
三:泛型方法
在返回值前加上符号<T> 表示该方法是泛型方法
public static <T> List<T> genericMethod(T param,String sql){
System.out.println("run sql...");
List<T> list = new ArrayList<T>();
return list;
}
四:泛型类
public class MyList<T>{
private T t;
public void add(T t){
system.out.println("put element into MyList,this element is type of T");
}
public T getT(){
return t;
}
}
泛型类如果将类型传入进来后,就没必要再声明泛型方法了(个人理解),因为类型参数已经传入
五:泛型的边界
List<? extends T> 表示? 的上限是类型T,可以接收任意T的子类(包括T)的List
List<? super T> 表示? 的下限是类型T,可以接收任意T的父类(包括T) 的List
六:泛型擦除
在编译后,所有关于泛型的信息会被擦除掉,所以在方法重载时,类似下面这样情况,是会编译出错的,擦除后,是同一个方法
public List<Integer> method()
public List<String> method()