中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

當(dāng)前位置: 首頁(yè) / 技術(shù)干貨 / 正文
集合泛型不匹配導(dǎo)致的ClassCastException異常解決過(guò)程

2023-01-06

泛型 類(lèi)型   

  一. 代碼重現(xiàn)

  前幾天有個(gè)學(xué)生小K編寫(xiě)集合代碼時(shí),運(yùn)行的結(jié)果中卻出現(xiàn)了一個(gè)自己沒(méi)見(jiàn)過(guò)的異常,他不知道怎么解決,于是就跑來(lái)找輝哥幫忙。下面就是小K的代碼,大家可以來(lái)看看,如下所示:

圖片 1

  上述代碼,一旦運(yùn)行就會(huì)出現(xiàn)下圖中的異常現(xiàn)象。說(shuō)實(shí)話,對(duì)輝哥來(lái)說(shuō),只要一遇到bug,真是瞬間感覺(jué)連吃大盤(pán)雞都不香了,必須立馬盤(pán)它才行。

圖片 2

  上圖中,我們看到了一個(gè)叫做ClassCastException類(lèi)型轉(zhuǎn)換的異常!為什么會(huì)出現(xiàn)這個(gè)bug呢?其實(shí)如果我們仔細(xì)檢查一下代碼,就會(huì)發(fā)現(xiàn)原來(lái)是集合中的值寫(xiě)錯(cuò)了!我們聲明的集合泛型是Double類(lèi)型的,結(jié)果添加數(shù)據(jù)元素的時(shí)候,給集合添加了一個(gè)整型的元素,這樣就造成了上述異常。而且根據(jù)錯(cuò)誤信息的提示,異常出現(xiàn)在代碼的第40行位置,現(xiàn)在我們知道了異常的原因和位置,接下來(lái)解決就容易了。

  二. bug分析

  其實(shí)上述代碼中之所以會(huì)出現(xiàn)問(wèn)題,是因?yàn)榧蠈?duì)泛型的嚴(yán)格要求所導(dǎo)致的。一開(kāi)始小K覺(jué)著int類(lèi)型可以直接轉(zhuǎn)換為double類(lèi)型,所以就往集合中添加了整型數(shù)據(jù)。但實(shí)際上Java中的集合泛型,要求的必須是包裝類(lèi),我們的代碼中就是Interger和Double,所以是無(wú)法將基本類(lèi)型直接轉(zhuǎn)為包裝類(lèi)型的。但小K卻不明白,為什么基本類(lèi)型與包裝類(lèi)型兩者的類(lèi)型不一致,但在往集合中添加數(shù)據(jù)時(shí)卻可以添加進(jìn)去呢?為了給小K講明白這個(gè)問(wèn)題,輝哥就通過(guò)javap命令帶小K查看了反編譯后的List類(lèi)型,我們來(lái)看看泛型的底層究竟是個(gè)什么情況,如下圖所示:

圖片 3

  通過(guò)反編譯可以看出,集合在底層編譯時(shí),其實(shí)所謂的泛型都被擦除了。也就是說(shuō),當(dāng)我們?cè)谑褂梅盒蜁r(shí),任何具體的類(lèi)型信息都被擦除了,你唯一知道的就是你在使用一個(gè)對(duì)象。所以List和List在運(yùn)行時(shí)事實(shí)上是相同的類(lèi)型。而這其中原始類(lèi)型的集合是特別容易出問(wèn)題的,因?yàn)樵碱?lèi)型會(huì)跳過(guò)泛型檢查且很不安全,List、List 和 List 等存在著巨大的差異,泛型在使用中很容易造成類(lèi)型擦除。那么到底什么是泛型擦除?我們繼續(xù)往下看。

  三. 泛型的擦除

  我們知道,Java泛型這個(gè)特性并不是一開(kāi)始就有的,而是從JDK 1.5才開(kāi)始加入的。因此Sun公司為了兼容之前的舊版本,Java對(duì)泛型的實(shí)現(xiàn)采取了“偽泛型”的策略,也就是說(shuō)Java在語(yǔ)法上支持泛型,但在編譯階段會(huì)進(jìn)行所謂的“類(lèi)型擦除”(Type Erasure),將所有的泛型表示(尖括號(hào)中的內(nèi)容)都替換為具體的類(lèi)型(其對(duì)應(yīng)的原生態(tài)類(lèi)型),就像完全沒(méi)有泛型一樣。

  并且泛型在擦除的時(shí)候,還會(huì)根據(jù)泛型的具體類(lèi)型來(lái)進(jìn)行。

  四. 泛型相關(guān)知識(shí)回顧

  泛型其實(shí)就是引用類(lèi)型的占位符,主要用于避免引用類(lèi)型的相互轉(zhuǎn)換,替換之前使用的Object類(lèi)型,去除不同類(lèi)型之間的強(qiáng)轉(zhuǎn)。

  1. 泛型的應(yīng)用

  泛型主要可以用在 泛型類(lèi)、泛型接口、泛型方法 上,也就是說(shuō),泛型可以在類(lèi)、接口、方法上使用。

  2. 泛型通配符

  在泛型中,有幾個(gè)常用的通配符,我們需要掌握。

  ?:表示右邊的泛型可以是任意類(lèi)型,還可以指定一個(gè)泛型的上限和下限。

  泛型上限:

  - 語(yǔ)法格式: 類(lèi)型名稱(chēng) 對(duì)象名稱(chēng)

  - 語(yǔ)法意義: 只能接收該類(lèi)型及其子類(lèi)

  泛型下限:

  - 語(yǔ)法格式: 類(lèi)型名稱(chēng) 對(duì)象名稱(chēng)

  - 語(yǔ)法意義: 只能接收該類(lèi)型及其父類(lèi)型

  具體用法,如下圖所示:

圖片 4

  現(xiàn)在你知道為什么會(huì)出現(xiàn)上述異常了嗎?對(duì)泛型的理解是否有進(jìn)一步加深了呢?如果還有不明白的地方,可以給客服留言,客服會(huì)及時(shí)給你回復(fù)的。

好程序員公眾號(hào)

  • · 剖析行業(yè)發(fā)展趨勢(shì)
  • · 匯聚企業(yè)項(xiàng)目源碼

好程序員開(kāi)班動(dòng)態(tài)

More+
IT培訓(xùn)IT培訓(xùn)
在線咨詢(xún)
IT培訓(xùn)IT培訓(xùn)
試聽(tīng)
IT培訓(xùn)IT培訓(xùn)
入學(xué)教程
IT培訓(xùn)IT培訓(xùn)
立即報(bào)名
IT培訓(xùn)

Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號(hào)-5 京公網(wǎng)安備 11010802035720號(hào)

中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

            国产日本亚洲高清| 91 com成人网| 日韩欧美一级二级| 亚洲色图.com| 国产精品一区三区| 911精品国产一区二区在线| 国产精品成人网| 久久国产视频网| 欧美日韩黄色影视| 中文字幕欧美一| 国产一区 二区 三区一级| 欧美精品国产精品| 亚洲情趣在线观看| 国产成人在线视频网址| 91精品国产综合久久久蜜臀粉嫩| 一区二区视频在线| 成人福利视频在线| 久久久久久久久久看片| 男人操女人的视频在线观看欧美| 在线观看日韩精品| 亚洲男同性恋视频| 不卡在线观看av| 久久久99精品免费观看| 免费的成人av| 麻豆国产欧美一区二区三区| 精品视频在线免费| 一区二区视频在线| 99久久综合色| 欧美老肥妇做.爰bbww| 亚洲激情网站免费观看| eeuss鲁一区二区三区| 欧美激情一区二区在线| 国产在线精品不卡| 亚洲精品在线免费播放| 久久激五月天综合精品| 日韩亚洲欧美高清| 免费视频一区二区| 91精品国产福利在线观看| 欧美激情一区二区三区不卡| 国产一区二区在线免费观看| 日韩精品在线网站| 久久国产精品99久久人人澡| 欧美日韩国产高清一区| 午夜天堂影视香蕉久久| 欧美色网一区二区| 亚洲福利一二三区| 欧美三级一区二区| 午夜精品久久久久久久久| 国产成人午夜精品5599| 国产日韩视频一区二区三区| 国产超碰在线一区| 中文字幕精品三区| 99re热这里只有精品视频| 亚洲精品视频在线看| 在线观看免费成人| 日韩中文字幕区一区有砖一区 | 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 一区二区免费在线| 欧美亚一区二区| 午夜电影久久久| 91精品国产综合久久久久久久久久| 青青草国产成人av片免费| 欧美成人一区二区三区片免费| 久88久久88久久久| 国产喷白浆一区二区三区| jlzzjlzz欧美大全| 亚洲一区二区三区美女| 日韩午夜小视频| 国产乱理伦片在线观看夜一区| 国产精品私人自拍| 在线日韩av片| 日本大胆欧美人术艺术动态| 26uuu另类欧美亚洲曰本| 成人丝袜18视频在线观看| 亚洲精品国产一区二区精华液| 欧美精品xxxxbbbb| 国产一区二区三区蝌蚪| 最好看的中文字幕久久| 欧美男人的天堂一二区| 国内精品写真在线观看| 成人免费一区二区三区视频 | 久久99精品久久久久久动态图| 久久久综合精品| 91毛片在线观看| 美女视频免费一区| 国产精品久久久久久妇女6080| 欧美性猛交xxxxxx富婆| 激情伊人五月天久久综合| 欧美疯狂性受xxxxx喷水图片| 久久99在线观看| 亚洲国产高清不卡| 欧美日韩国产免费一区二区| 国产一区二区在线视频| 亚洲精品一线二线三线| 91免费观看视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产三级一区二区三区| 在线视频观看一区| 国产一本一道久久香蕉| 尤物视频一区二区| 久久先锋资源网| 欧美日韩亚洲丝袜制服| 国产福利精品一区二区| 五月激情丁香一区二区三区| 国产亚洲欧美日韩俺去了| 欧美色精品在线视频| 国产乱子轮精品视频| 亚洲一区自拍偷拍| 国产欧美一区视频| 欧美人狂配大交3d怪物一区| 国产91丝袜在线播放0| 日韩不卡免费视频| 亚洲天堂av一区| 久久亚洲综合色| 欧美丰满嫩嫩电影| 91亚洲永久精品| 国产传媒日韩欧美成人| 日本免费在线视频不卡一不卡二| 亚洲日本青草视频在线怡红院| 亚洲精品一区二区三区四区高清| 欧美专区在线观看一区| jiyouzz国产精品久久| 精品一区二区三区欧美| 午夜av区久久| 亚洲六月丁香色婷婷综合久久 | 欧美最猛性xxxxx直播| 国产成人精品亚洲日本在线桃色| 午夜不卡在线视频| 亚洲人精品一区| 欧美经典一区二区三区| 精品国产凹凸成av人导航| 777久久久精品| 欧美日韩高清在线播放| 在线中文字幕不卡| 94-欧美-setu| www..com久久爱| 国产91清纯白嫩初高中在线观看| 久久成人免费日本黄色| 免费成人在线播放| 青青草97国产精品免费观看无弹窗版| 亚洲第一福利视频在线| 亚洲国产视频在线| 亚洲午夜一区二区| 一区二区成人在线视频| 亚洲精品成人悠悠色影视| 亚洲人123区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产色产综合产在线视频| 国产日产欧美一区| 亚洲国产精品av| 国产精品高潮久久久久无| 国产精品伦理在线| 久久久精品国产99久久精品芒果| 精品蜜桃在线看| 欧美一区二区免费| 日韩视频一区二区| 欧美一级xxx| 正在播放亚洲一区| 日韩精品一区在线观看| 69久久99精品久久久久婷婷| 欧美日韩一区二区在线观看视频| 国产一区二区三区日韩| 国产99久久久国产精品免费看| 国产精品一区在线| 国产传媒一区在线| 大胆欧美人体老妇| 播五月开心婷婷综合| 91视频一区二区| 色素色在线综合| 色婷婷激情综合| 99国产精品久久久久| 在线视频观看一区| 欧美在线观看一区| 欧美日韩国产a| 欧美www视频| 精品国产凹凸成av人网站| 久久九九久精品国产免费直播| 欧美一区二区三区四区高清| 精品国产免费视频| 久久久久久夜精品精品免费| 久久精品夜夜夜夜久久| 久久久久久夜精品精品免费| 国产午夜精品久久久久久免费视| 色哟哟一区二区| 欧美日韩免费一区二区三区| 日韩欧美一级二级三级| 精品国产一区二区三区忘忧草| 欧美电视剧免费观看| 久久久www成人免费毛片麻豆 | 日韩一区精品视频| 欧美a一区二区| 精品亚洲成a人| 粉嫩aⅴ一区二区三区四区| 色先锋aa成人| 4438成人网| 久久免费午夜影院| 综合婷婷亚洲小说| 一区二区三区毛片| 免费看欧美美女黄的网站| 国产一区视频导航|