Java中List add添加不同類型元素的講解
問題:
今天看java的list ,list后面的<> 里面可以填多種類型,但是如果不填寫類型那就默認(rèn)為 Object 類型。 所有我門 add 到 list 里的 數(shù)據(jù)都會(huì)被轉(zhuǎn)換成 Object 類型。
而當(dāng)我門再從list 中取出該數(shù)據(jù)時(shí),就會(huì)發(fā)現(xiàn)數(shù)據(jù)類型已經(jīng)改變。
解答
java集合中 能添加不同類型的元素其實(shí)不同類型的元素,只是地一定層次是不同元素,根本上都繼承于Object類,本質(zhì)上還是同一類型的元素。
List<Object> list = new ArrayList<Object>();
list.add("abc");
list.add(123);
list.add(new HashMap<Integer,String>());
都可以。
或者說你聲明集合時(shí),不聲明它的泛型類型如:
List list = new ArrayList();
它默認(rèn)就是Object泛型的,跟上面的List<Object>效果一樣。
Object類是所有Java類的祖先。每個(gè)類都使用 Object 作為超類。所有對(duì)象(包括數(shù)組)都實(shí)現(xiàn)這個(gè)類的方法。
在不明確給出超類的情況下,Java會(huì)自動(dòng)把Object作為要定義類的超類。
可以使用類型為Object的變量指向任意類型的對(duì)象。
在Java中由于繼承和向上轉(zhuǎn)型,子類可以非常自然地轉(zhuǎn)換成父類,但是父類轉(zhuǎn)換成子類則需要強(qiáng)制轉(zhuǎn)換。因?yàn)樽宇悡碛斜雀割惛嗟膶傩浴⒏鼜?qiáng)的功能,所以父類轉(zhuǎn)換為子類需要強(qiáng)制。那么,是不是只要是父類轉(zhuǎn)換為子類就會(huì)成功呢?其實(shí)不然,他們之間的強(qiáng)制類型轉(zhuǎn)換是有條件的。
由于以上的原因 我門存入 list 的不同類型的對(duì)象都可以 自然的轉(zhuǎn)換成Object 類型,但是取出的時(shí)候都需要強(qiáng)制轉(zhuǎn)換。
示例

總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
Java中不得不知的Collection接口與Iterator迭代器
這篇文章主要介紹了Java中的Collection接口與Iterator迭代器,文中有詳細(xì)的代碼示例供大家參考,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-06-06
SpringBoot創(chuàng)建自定義starter詳解
這篇文章主要介紹了SpringBoot創(chuàng)建自定義starter詳解,Starter是Spring Boot中的一個(gè)非常重要的概念,Starter相當(dāng)于模塊,它能將模塊所需的依賴整合起來并對(duì)模塊內(nèi)的Bean根據(jù)環(huán)境(條件)進(jìn)行自動(dòng)配置,需要的朋友可以參考下2024-01-01
Spring Security基于HttpRequest配置權(quán)限示例詳解
這篇文章主要介紹了Spring Security基于HttpRequest配置權(quán)限示例詳解,我們?cè)谂渲弥信渲玫膗rl被封裝成RequestMatcher,而hasRole被封裝成AuthorityAuthorizationManager,本文結(jié)合示例代碼講解的非常詳細(xì),需要的朋友可以參考下2024-03-03
Java使用備忘錄模式實(shí)現(xiàn)過關(guān)類游戲功能詳解
這篇文章主要介紹了Java使用備忘錄模式實(shí)現(xiàn)過關(guān)類游戲功能,結(jié)合實(shí)例形式詳細(xì)分析了java備忘錄模式的概念、原理及其在過關(guān)類游戲中的具體應(yīng)用方法,需要的朋友可以參考下2018-04-04
freemarker簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
FreeMarker是一個(gè)模板引擎,一個(gè)基于模板生成文本輸出的通用工具,使用純Java編寫,有興趣的可以了解一下2017-08-08

