在任何重要的軟件項目中,bug都是不可避免的,仔細的規劃、編程和測試能夠幫助減小它們的廣泛性,可是它們總會在某個地方以某種方式潛入你的代碼,隨着新功能的引入以及你的代碼庫在規模和複雜性方面的增加,這一點變得尤其明顯。程序員
幸運的是,一些錯誤比其餘錯誤更容易被發現,例如,編譯時錯誤能夠在早期檢測到,你可使用編譯器的錯誤消息來肯定問題所在並當即修復它。可是,運行時錯誤可能會更成問題,它們並不老是馬上浮出水面,當它們出現時,它可能在程序中的某個點上,與問題的實際緣由相去甚遠。算法
泛型經過在編譯時檢測到更多錯誤來增長代碼的穩定性。編程
簡而言之,泛型使類型(類和接口)在定義類、接口和方法時成爲參數,與方法聲明中使用的更熟悉的形式參數很是類似,類型參數提供了一種使你可使用不一樣的輸入重用相同的代碼的方法,不一樣之處在於形式參數的輸入是值,而類型參數的輸入是類型。segmentfault
使用泛型的代碼比非泛型代碼有許多好處:安全
Java編譯器對泛型代碼應用強類型檢查,並在代碼違反類型安全時發出錯誤,修復編譯時錯誤比修復運行時錯誤更容易,這很難找到。測試
如下沒有泛型的代碼片斷須要強制轉換:code
List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0);
當重寫爲使用泛型時,代碼不須要強制轉換:接口
List<String> list = new ArrayList<String>(); list.add("hello"); String s = list.get(0); // no cast
經過使用泛型,程序員能夠實現通用算法,這些算法能夠處理不一樣類型的集合,能夠自定義,而且類型安全且易於閱讀。get