泛型的概念
通過API可以看到Collection,List,ArrayList,這幾個類里面都有,這個就是泛型,里面的E可以是任何引用數據類型,使用泛型指明了數據類型之后,這個集合里面只能存儲這種數據類型的對象。
不使用泛型時,要進行多次類型強制轉換
使用泛型之后:
泛型的優點
可以統一集合中的數據類型,提高安全性
可以減少強制類型轉換
自定義泛型
通過JDK的源碼可以看到,泛型一般寫的都是或者,里面的T和E就是表示使用者指定的類型??梢宰约憾x一個使用泛型的類
泛型通配符
在實際工作當中,有可能通過調用某個方法來接受一個返回值List的數據,這樣就不太好確定返回值中的數據類型,這樣可以使用泛型通配符<?>
List<?>list=newArrayList();//=號右邊可能是通過調用某個方法返回的List
使用泛型通配符限定子類或者父類
? extends E
向下限定,E及其子類,可以存儲當前類型的子類
? super E
向上限定,E及其父類,可以存儲當前類型的父類
定義一個Student類繼承Person
在List中方法addAll是限定了子類(? extends E),定義測試類: