泛型:標(biāo)簽
舉例:超市購(gòu)物架上很多瓶子饶囚,每個(gè)瓶子裝的是什么帕翻,有標(biāo)簽
?????中藥店,每個(gè)抽屜外面貼著標(biāo)簽
集合容器類(lèi)在設(shè)計(jì)階段/聲明階段不能確定這個(gè)容器到底實(shí)際存的是什么類(lèi)型的對(duì)象萝风,所以在JDK1.5之前只能把元素類(lèi)型設(shè)計(jì)為Object嘀掸,JDK1.5之后使用泛型來(lái)解決。因?yàn)檫@個(gè)時(shí)候除了元素的類(lèi)型不確定规惰,其他的部分是確定的睬塌,例如關(guān)于這個(gè)元素如何保存,如何管理等是確定的卿拴,因此此時(shí)把元素的類(lèi)型設(shè)計(jì)成一個(gè)參數(shù)衫仑,這個(gè)類(lèi)型參數(shù)叫做泛型。Collection<E>堕花,List<E>文狱,ArrayList?? 這個(gè)<E>就是類(lèi)型參數(shù),即泛型
從JDK1.5以后缘挽,Java引入了“參數(shù)化類(lèi)型(Parameterized type)”的概念瞄崇,允許我們?cè)趧?chuàng)建集合時(shí)再指定集合元素的類(lèi)型呻粹,正如:List<String>,這表明該List只能保存字符串類(lèi)型的對(duì)象苏研。
所謂泛型等浊,就是允許在定義類(lèi)、接口時(shí)指定類(lèi)型參數(shù)(我們稱(chēng)為類(lèi)型形參)摹蘑,這個(gè)類(lèi)型形參將在使用時(shí)(例如筹燕,繼承或?qū)崿F(xiàn)這個(gè)接口,用這個(gè)類(lèi)型聲明變量衅鹿、創(chuàng)建對(duì)象時(shí))確定(即傳入實(shí)際的類(lèi)型參數(shù)撒踪,也稱(chēng)為類(lèi)型實(shí)參)。JDK1.5改寫(xiě)了集合框架中的全部接口和類(lèi)大渤,為這些接口制妄、類(lèi)增加了泛型支持,從而可以在聲明集合變量泵三、創(chuàng)建集合對(duì)象時(shí)傳入類(lèi)型實(shí)參耕捞。
為什么要使用泛型
那么為什么要有泛型呢,直接Object不是也可以存儲(chǔ)數(shù)據(jù)嗎烫幕?
?解決元素存儲(chǔ)的安全性問(wèn)題俺抽,好比商品、藥品標(biāo)簽纬霞,不會(huì)弄錯(cuò)
?解決獲取數(shù)據(jù)元素時(shí)凌埂,需要類(lèi)型強(qiáng)制轉(zhuǎn)換的問(wèn)題,好比不用每回拿商品诗芜、藥品都要辨別
泛型就是為了解決哪種在聲明時(shí)不能確定類(lèi)型瞳抓,但在使用時(shí)才能確定類(lèi)型的情況