泛型類
泛型類定義時(shí)只需要在類名后面加上類型參數(shù)即可别伏,當(dāng)然你也可以添加多個(gè)參數(shù),類似于<K,V>,<T,E,K>等。
public class Generic<T>{
private T t;
public Generic(T t) { //泛型構(gòu)造方法形參t的類型也為T蛙紫,T的類型由外部指定
this.t= t;
}
public T getT(){
return t;
}
}
泛型接口
//定義一個(gè)泛型接口
public interface Generator<T> {
public T next();
}
- 泛型接口未傳入泛型實(shí)參時(shí)拇派,與泛型類的定義相同荷辕,在聲明類的時(shí)候凿跳,需將泛型的聲明也一起加到類中。
class FruitGenerator<T> implements Generator<T>
- 如果泛型接口傳入類型參數(shù)時(shí)疮方,實(shí)現(xiàn)該泛型接口的實(shí)現(xiàn)類控嗜,則所有使用泛型的地方都要替換成傳入的實(shí)參類型。
class DataHolder implements Generator<String>
泛型方法
泛型方法既可以存在于泛型類中案站,也可以存在于普通的類中躬审。如果使用泛型方法可以解決問(wèn)題,那么應(yīng)該盡量使用泛型方法蟆盐。
public與返回值中間非常重要承边,可以理解為聲明此方法為泛型方法。
public <T> void PrinterInfo(T e) {
System.out.println(e);
}
靜態(tài)方法無(wú)法訪問(wèn)類上定義的泛型石挂,如果在類中定義使用泛型的靜態(tài)方法博助,需要添加額外的泛型聲明(將這個(gè)方法定義成泛型方法。)
類型通配符
public static void getData(List<?> data)
類型通配符一般是使用?
代替具體的類型參數(shù)痹愚。例如List<?>
在邏輯上是List<String>
,List<Integer>
等所有List<具體類型實(shí)參>
的父類富岳。
- 上界通配符<? extends T>
如 List<? extends Number>來(lái)定義,如此定義就是通配符泛型值接受Number及其下層子類類型拯腮。 - 下界通配符<? super T>>
如 List<? super Number>來(lái)定義窖式,表示類型只能接受Number及其三層父類類型,如 Object 類型的實(shí)例