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