Java 泛型

泛型

Java泛型設(shè)計(jì)原則:只要在編譯時(shí)期沒(méi)有出現(xiàn)警告,那么運(yùn)行時(shí)期就不會(huì)出現(xiàn)ClassCastException異常.

泛型:把類(lèi)型明確的工作推遲到創(chuàng)建對(duì)象或調(diào)用方法的時(shí)候才去明確的特殊的類(lèi)型

參數(shù)化類(lèi)型:

  • 把類(lèi)型當(dāng)作是參數(shù)一樣傳遞
  • <數(shù)據(jù)類(lèi)型> 只能是引用類(lèi)型

相關(guān)術(shù)語(yǔ):

  • ArrayList<E>中的E稱(chēng)為類(lèi)型參數(shù)變量
  • ArrayList<Integer>中的Integer稱(chēng)為實(shí)際類(lèi)型參數(shù)
  • 整個(gè)稱(chēng)為ArrayList<E>泛型類(lèi)型
  • 整個(gè)ArrayList<Integer>稱(chēng)為參數(shù)化的類(lèi)型ParameterizedType

有了泛型以后:

  • 代碼更加簡(jiǎn)潔【不用強(qiáng)制轉(zhuǎn)換】
  • 程序更加健壯【只要編譯時(shí)期沒(méi)有警告,那么運(yùn)行時(shí)期就不會(huì)出現(xiàn)ClassCastException異?!?/li>
  • 可讀性和穩(wěn)定性【在編寫(xiě)集合的時(shí)候,就限定了類(lèi)型】

類(lèi)型通配符

現(xiàn)在有個(gè)需求:方法接收一個(gè)集合參數(shù),遍歷集合并把集合元素打印出來(lái),怎么辦?

public void test(List<?> list){
    for(int i=0;i<list.size();i++){
        System.out.println(list.get(i));
    }
}

?號(hào)通配符表示可以匹配任意類(lèi)型,任意的Java類(lèi)都可以匹配。

現(xiàn)在非常值得注意的是,當(dāng)我們使用?號(hào)通配符的時(shí)候:就只能調(diào)對(duì)象與類(lèi)型無(wú)關(guān)的方法,不能調(diào)用對(duì)象與類(lèi)型有關(guān)的方法。

記住,只能調(diào)用與對(duì)象無(wú)關(guān)的方法,不能調(diào)用對(duì)象與類(lèi)型有關(guān)的方法。因?yàn)橹钡酵饨缡褂貌胖谰唧w的類(lèi)型是什么。也就是說(shuō),在上面的List集合,我是不能使用add()方法的。因?yàn)閍dd()方法是把對(duì)象丟進(jìn)集合中,而現(xiàn)在我是不知道對(duì)象的類(lèi)型是什么。

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

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

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