學(xué)會Java泛型系列(一):Java泛型

泛型(Generics)是一種參數(shù)化類型機(jī)制,一個類或者方法要處理一個對象一般會使用多態(tài),一是把這個對象定義為接口,就可以處理擴(kuò)展這個接口的對象了,但這種方法有很大的局限性,被處理類要擴(kuò)展這個接口,以前的類不能復(fù)用的個處理類;或者把接受的對象定義為Object,但這種方式要做類型檢查也容易出現(xiàn)ClassCastException。

Java1.5的時候引入泛型的機(jī)制,由于要兼容之前版本的代碼,Java對于泛型只是在編譯器上面動了手腳,所以有一些局限性,后面的章節(jié)會詳細(xì)講解這點。

下面舉一個例子對比泛型帶來的好處
未使用泛型:

List list = new ArrayList();
list.add(1);
list.add("123");
list.add(false);
        
Object o1 = list.get(0);
String o2 = (String) list.get(1); //會產(chǎn)生ClassCastException
boolean o3 = (Boolean) list.get(2);

可以看出如果要類型轉(zhuǎn)換才能拿到除Object外的類型,如果你拿到其他人寫的方法返回一個list,還有去弄清楚每個元素是什么類型,難以維護(hù)。當(dāng)然我們平時用的時候也不會往一個list放不同類型的對象,但也免不了要查閱list里面約定的是放什么類型和類型轉(zhuǎn)換后才能使用。
使用泛型就可以免除這種煩惱:

List<String> list = new ArrayList<String>();
//List<String> list = new ArrayList<>();  //Java1.7后會自動類型推斷
list.add("123");
//list.add(false); //編譯器會報錯,不允許傳非String的類型
        
String o2 =  list.get(0); //不需要轉(zhuǎn)型,編譯器會幫忙處理
//boolean o3 = list.get(1);//類型不對應(yīng),編譯不通過

使用泛型之后,編譯器會幫我們做類型約束和檢驗,可以使代碼更優(yōu)雅

目錄

學(xué)會Java泛型系列(零):簡介及目錄
學(xué)會Java泛型系列(一):Java泛型
學(xué)會Java泛型系列(二):泛型定義與使用
學(xué)會Java泛型系列(三):泛型原理-擦除
學(xué)會Java泛型系列(四):擦除帶來的問題以及解決辦法
學(xué)會Java泛型系列(五):限定符
學(xué)會Java泛型系列(六):總結(jié)
學(xué)會Java泛型系列(七):常用案例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容