jdk1.5
好處:
1、将運作時的異常提前至編譯時
2、避免了無謂的強轉
常見應用:
ArrayList<String> list = new ArrayList<String>(); // 裡面存儲的是String類型的資料類型
注意:泛型無多态,左右兩邊必須一緻(推薦),或者隻寫一邊(為向上相容)
自定義泛型:一個資料類型的占位符或者一個資料類型的變量
1、泛型方法 :
參數化類型,将類型由原來的具體類型參數化,類型也定義為參數形式(類型形參),在使用時傳入具體的類型(類型形參)
修飾符 <T>傳回值類型 函數名(T t){......}; // public <T>void get(T t){}
在泛型中不能使用基本類型,要使用則用其對應的包裝類
方法泛型注意:
1、方法上自定義泛型,這個自定義泛型的具體資料類型是在調用該方法時傳入實參時确定的
2、用T或者E表示
2、泛型類
class 類名<T> {
}
注意:
1、類自定義泛型的具體資料類型是在使用該類的時候建立對象的時候确定的
2、使用該類是沒有指定泛型的具體類型,預設為Object類型
3、在類上自定義泛型不能作用于靜态方法,如果靜态方法需要使用自定義類型,需要自己在方法上聲明使用(原因1)
3、泛型接口
interface 接口名<T>{
}
注意:
1、接口上自定義的泛型的具體資料類型是在實作一個接口時指定的
2、實作接口時沒有指定具體的資料類型,預設是Object
要想延長接口自定義泛型的具體資料類型到建立實作接口實作類對象時才指定
public class Demo<T> implements Dao<T>{
}
4、泛型的上下限
public static void print(Collection<? super Integer> c) // ? super Integer 隻能存儲Integer或者Integer的父類元素,泛型的下限;extends是上限