咱們的集合能夠存儲多種數據類型的元素,那麼在存儲的時候沒有任何問題,可是在獲取元素,並向下轉型的時候,可能會存在一個錯誤,而這個錯誤就是ClassCastException . 很顯然,集合的這種能夠存儲多種數據類型的元素的這個特色,不怎麼友好 , 程序存在一些安全隱患,那麼爲了出來這種安全隱患,咱們應該限定一個集合存儲元素的數據類型,咱們只讓他存儲統一中數據類型的元素,那麼在作向下轉型的是就不會存在這種安全隱患了. 怎麼限定集合只能給我存儲同一種數據類型的元素呢? 須要使用泛型。java
瞭解引入泛型的動機,就先從語法糖開始瞭解。程序員
語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家Peter.J.Landin發明的一個術語,指在計算機語言中添加的某種語法,這種語法對語言的功能並無影響,可是更方便程序員使用。Java中最經常使用的語法糖主要有泛型、變長參數、條件編譯、自動拆裝箱、內部類等。虛擬機並不支持這些語法,它們在編譯階段就被還原回了簡單的基礎語法結構,這個過程成爲解語法糖。安全
Java 泛型就是把一種語法糖,經過泛型使得在編譯階段完成一些類型轉換的工做,避免在運行時強制類型轉換而出現ClassCastException,即類型轉換異常。ide
JDK 1.5 時才增長了泛型,並在很大程度上都是方便集合的使用,使其可以記住其元素的數據類型。優化
在泛型(Generic type或Generics)出現以前,是這麼寫代碼的:博客設計
public static void main(String[] args){ List list = new ArrayList(); list.add("123"); list.add("456"); System.out.println((String)list.get(0)); }
固然這是徹底容許的,由於List裏面的內容是Object類型的,天然任何對象類型均可以放入、均可以取出,可是這麼寫會有兩個問題:code
public static void main(String[] args){ List<String> list = new ArrayList<String>(); list.add("123"); list.add("456"); System.out.println(list.get(0)); }
這就是泛型。對象