您好,登錄后才能下訂單哦!
問(wèn)題:
今天看java的list ,list后面的<> 里面可以填多種類(lèi)型,但是如果不填寫(xiě)類(lèi)型那就默認(rèn)為 Object 類(lèi)型。 所有我門(mén) add 到 list 里的 數(shù)據(jù)都會(huì)被轉(zhuǎn)換成 Object 類(lèi)型。
而當(dāng)我門(mén)再?gòu)膌ist 中取出該數(shù)據(jù)時(shí),就會(huì)發(fā)現(xiàn)數(shù)據(jù)類(lèi)型已經(jīng)改變。
解答
java集合中 能添加不同類(lèi)型的元素其實(shí)不同類(lèi)型的元素,只是地一定層次是不同元素,根本上都繼承于Object類(lèi),本質(zhì)上還是同一類(lèi)型的元素。
List<Object> list = new ArrayList<Object>(); list.add("abc"); list.add(123); list.add(new HashMap<Integer,String>());
都可以。
或者說(shuō)你聲明集合時(shí),不聲明它的泛型類(lèi)型如:
List list = new ArrayList();
它默認(rèn)就是Object泛型的,跟上面的List<Object>效果一樣。
Object類(lèi)是所有Java類(lèi)的祖先。每個(gè)類(lèi)都使用 Object 作為超類(lèi)。所有對(duì)象(包括數(shù)組)都實(shí)現(xiàn)這個(gè)類(lèi)的方法。
在不明確給出超類(lèi)的情況下,Java會(huì)自動(dòng)把Object作為要定義類(lèi)的超類(lèi)。
可以使用類(lèi)型為Object的變量指向任意類(lèi)型的對(duì)象。
在Java中由于繼承和向上轉(zhuǎn)型,子類(lèi)可以非常自然地轉(zhuǎn)換成父類(lèi),但是父類(lèi)轉(zhuǎn)換成子類(lèi)則需要強(qiáng)制轉(zhuǎn)換。因?yàn)樽宇?lèi)擁有比父類(lèi)更多的屬性、更強(qiáng)的功能,所以父類(lèi)轉(zhuǎn)換為子類(lèi)需要強(qiáng)制。那么,是不是只要是父類(lèi)轉(zhuǎn)換為子類(lèi)就會(huì)成功呢?其實(shí)不然,他們之間的強(qiáng)制類(lèi)型轉(zhuǎn)換是有條件的。
由于以上的原因 我門(mén)存入 list 的不同類(lèi)型的對(duì)象都可以 自然的轉(zhuǎn)換成Object 類(lèi)型,但是取出的時(shí)候都需要強(qiáng)制轉(zhuǎn)換。
示例
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。