Java的List集合中泛型使用詳解
list泛型類(lèi)型
我們來(lái)看一段代碼
public void test(){ Object o=null; String str1=null; //多態(tài)表現(xiàn) 父類(lèi)的引用接收子類(lèi)的對(duì)象 o=str1; }
但是下面這樣的代碼是不能賦值的
public void test(){ List<Object> list1=null; List<String> list2=null; //此時(shí)list1和list2不具有子父類(lèi)關(guān)系 list1=list2; }
我們可以看到 需要的是Object 傳的是一個(gè)String 這種情況我們使用時(shí)候是需要注意的 但是有一種情況是可以的
//但是這種情況是可以的 泛型相同 多態(tài)的表現(xiàn) List<String> list3=null; ArrayList<String> list4=null; list3=list4; //相當(dāng)于 這樣 List<String> list5=new ArrayList<String>();
這樣是可以的相當(dāng)于 多態(tài)的表現(xiàn)
List泛型使用通配符 ?
我們使用?通配符的時(shí)候 這樣賦值可以
public void List1() { List<String> list1 = new ArrayList<>(); List<?> list=new ArrayList<>(); list1.add("111"); //這樣賦值是可以的 list=list1; }
但是我們使用add、get方法時(shí)
public void List1() { List<String> list1 = new ArrayList<>(); List<?> list=new ArrayList<>(); list1.add("111"); //這樣賦值是可以的 list=list1; //對(duì)于List<?>就不能向其內(nèi)部添加數(shù)據(jù) //但是不可以添加數(shù)據(jù) 除了添加 null list.add("1"); //可以讀取數(shù)據(jù) list.get(0); }
可以看到是有錯(cuò)誤的 不能添加數(shù)據(jù)
但是有一個(gè)特例 添加null是可以添加的
public void List1() { List<String> list1 = new ArrayList<>(); List<?> list=new ArrayList<>(); list1.add("111"); //這樣賦值是可以的 list=list1; //對(duì)于List<?>就不能向其內(nèi)部添加數(shù)據(jù) //但是不可以添加數(shù)據(jù) 除了添加 null list.add("1"); //null可以 list.add(null); //可以讀取數(shù)據(jù) list.get(0); }
List泛型使用
有限制條件的通配符的使用 ? extents Person ? super Person
創(chuàng)建兩個(gè)類(lèi)演示
/** * @create: 2021/10/2 * @author: Tony Stark */ public class Person { }
/** * @create: 2021/10/2 * @author: Tony Stark */ public class Student extends Person { }
我們創(chuàng)建集合使用泛型賦值測(cè)試
public void Extent() { //必須賦值小于等于的類(lèi)型 List<? extends Person> list1 = null; //必須賦值大于等于 List<? super Person> list2 = null; List<Student> list3 = null; List<Person> list4 = null; List<Object> list5=null; list1=list3; list1=list4; list1=list5; list2=list3; list2=list4; list2=list5; }
可以看到報(bào)錯(cuò)了
這里就要介紹一下范圍的要求
- ? extents Person 必須賦值小于等于person的類(lèi)型
- ? super Person 必須賦值大于等于person的類(lèi)型
很明顯我們上面list5是object類(lèi)型大于了我們的list1要求小于等于persion 同理 list3是student不滿足list2大于等于person的要求
到此這篇關(guān)于Java的List集合中泛型使用詳解的文章就介紹到這了,更多相關(guān)List集合泛型詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java學(xué)習(xí)筆記:基本輸入、輸出數(shù)據(jù)操作實(shí)例分析
這篇文章主要介紹了Java學(xué)習(xí)筆記:基本輸入、輸出數(shù)據(jù)操作,結(jié)合實(shí)例形式分析了Java輸入、輸出數(shù)據(jù)相關(guān)函數(shù)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-04-04實(shí)體類(lèi)或?qū)ο笮蛄谢瘯r(shí),忽略為空屬性的操作
這篇文章主要介紹了實(shí)體類(lèi)或?qū)ο笮蛄谢瘯r(shí),忽略為空屬性的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06基于SpringBoot+Mybatis實(shí)現(xiàn)Mysql分表
這篇文章主要為大家詳細(xì)介紹了基于SpringBoot+Mybatis實(shí)現(xiàn)Mysql分表的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04java開(kāi)發(fā)之內(nèi)部類(lèi)的用法
本篇文章介紹了,java開(kāi)發(fā)之內(nèi)部類(lèi)的用法。需要的朋友參考下2013-05-05SpringBoot實(shí)現(xiàn)文件上傳與下載功能的示例代碼
文件上傳與下載是Web應(yīng)用開(kāi)發(fā)中常用的功能之一。接下來(lái)我們將討論如何在Spring?Boot的Web應(yīng)用開(kāi)發(fā)中,如何實(shí)現(xiàn)文件的上傳與下載,感興趣的可以了解一下2022-06-06springcloud 中 zuul 修改請(qǐng)求參數(shù)信息的方法
這篇文章主要介紹了springcloud 中 zuul 修改請(qǐng)求參數(shù)信息的方法,需要的朋友可以參考下2018-02-02Java數(shù)據(jù)結(jié)構(gòu)與算法入門(mén)實(shí)例詳解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法入門(mén)實(shí)例詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03