基本概念
簡(jiǎn)單來(lái)說(shuō)潘鲫,泛型使得程序具有了將邏輯(算法)震糖,和具體的數(shù)據(jù)類型分離的能力;也就是說(shuō)蚤假,處理邏輯和具體的類型無(wú)關(guān)栏饮;
泛型可以應(yīng)用于:
- 類
- 接口
- 方法:一個(gè)方法時(shí)否為泛型,和其所處的類是否為泛型沒(méi)有關(guān)系
常見的T勤哗,就是類型參數(shù)抡爹,泛型就是處理的數(shù)據(jù)類型不是固定的,可以作為參數(shù)傳入芒划;
原理
在程序執(zhí)行時(shí)冬竟,首先,由Java編譯器將java文件編譯為.class文件民逼,然后由虛擬機(jī)加載并運(yùn)行.class文件泵殴, 對(duì)于虛擬機(jī)而言,它是不知道泛型的拼苍;
對(duì)于泛型類笑诅,就是由編譯器將泛型代碼轉(zhuǎn)化為普通代碼,用的方法就是強(qiáng)制轉(zhuǎn)化與類型擦除疮鲫;
也就是先轉(zhuǎn)換為Object吆你,然后再插入必要的強(qiáng)制類型轉(zhuǎn)換;
優(yōu)勢(shì)
根據(jù)上面的原理俊犯,可以知道泛型提供給了我們更好的安全性和可讀性妇多;我們無(wú)需再手動(dòng)去轉(zhuǎn)換類型了
類型參數(shù)
可以限定其上限為某個(gè)具體的類,接口或其他類型參數(shù)
如T extends Integer等
通配符
? extends Integer
兩種關(guān)系:
- 通配符形式都可以用類型參數(shù)的形式進(jìn)行取代
- 能用通配符的就用通配符(形式簡(jiǎn)單)
- 如果返回值依賴類型參數(shù)燕侠,或者需要寫操作者祖,只能用類型參數(shù)
- ? super T 用于靈活的寫入或者比較立莉,不能用類型參數(shù)形式取代
- ? extends T 用于靈活讀取