為什么使用泛型?
Java編譯器在編譯時(shí)加強(qiáng)泛型代碼的類型檢查,避免運(yùn)行時(shí)不可預(yù)料的錯(cuò)誤。
泛型支持程序化類型作為參數(shù),使方法兼具靈活性。
泛型能讓你實(shí)現(xiàn)泛型算法,更具有通用性。
泛型類型和方法
泛型類型
參數(shù)化類型的類或接口。
格式:classname
調(diào)用泛型類型(又稱為參數(shù)化類型):Box
實(shí)例化泛型類型:Box
泛型方法
參數(shù)化類型的方法。
格式:publicstatic
調(diào)用泛型方法:Util.
通過(guò)extends來(lái)限定泛型類型和方法的邊界
通配符和子類型
Integer是Number的子類,但參數(shù)化類型Box
泛型類型之間幾乎沒(méi)有關(guān)系,但可以通過(guò)通配符在泛型類型之間建立關(guān)系。
?。客ㄅ浞?,用于參數(shù)、字段、局部變量的類型,不用于泛型類型和方法。
上界:List,不確定類型是指定類型或指定類型的子類,可以放松對(duì)變量的限制,如匹配List
無(wú)界:List,不確定類型的List。使用場(chǎng)景:1)List的元素都是Object類型,直接可以使用Object的方法。2)泛型類中的方法不依賴于類型參數(shù)。
下界:List,不確定類型是指定類型或指定類型的父類,可以盡量提高靈活性,如匹配List
通配符使用的場(chǎng)景
把參數(shù)變量看作兩類:
1、『in』提供給方法內(nèi)部使用,即傳入數(shù)據(jù)。
2、『out』提供給方法外部使用,即傳出數(shù)據(jù)。
利用WildcardCapture特性,通配符使用的場(chǎng)景為:
1、『in』使用上界通配符
2、『out』使用下界通配符
3、『in』可以使用Object的方法,使用無(wú)界通配符
4、即用作『in』,又用作『out』的,不使用通配符
泛型的限制
不能用primitive類型實(shí)例化泛型。如:Pair
不能實(shí)例化參數(shù)類型。如:newE();
不能定義類的靜態(tài)類型字段是參數(shù)類型。如:privatestaticTos;
參數(shù)類型不能使用instanceof和類型轉(zhuǎn)換。如:listinstanceofArrayList
不能創(chuàng)建參數(shù)化類型數(shù)組。如:List
不能Create,Catch,或者Throw參數(shù)化類型對(duì)象。如:classMathException
重載方法不能使用參數(shù)化類型被擦除后擁有同樣的原生類型。如:
publicvoidprint(Set
publicvoidprint(Set
被編譯擦除后是一樣的publicvoidprint(SetstrSet){}
以上就是長(zhǎng)沙中公優(yōu)就業(yè)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java基礎(chǔ)教程:java泛型教程”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。