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;
//此時(shí)list1和list2不具有子父類關(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;
//對于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;
//對于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è)類演示
/**
* @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;
}可以看到報(bào)錯(cuò)了

這里就要介紹一下范圍的要求
- ? 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動態(tài)代理之?dāng)r截器的應(yīng)用
今天小編就為大家分享一篇關(guān)于Java動態(tài)代理之?dāng)r截器的應(yīng)用,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
Spring?Cloud?Hystrix?服務(wù)降級限流策略詳解
這篇文章主要為大家介紹了Spring?Cloud?Hystrix?服務(wù)降級限流策略詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
關(guān)于Hystrix的監(jiān)控及可視化面板
這篇文章主要介紹了關(guān)于Hystrix的監(jiān)控及可視化面板,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
springboot動態(tài)調(diào)整日志級別的操作大全
這篇文章主要介紹了springboot動態(tài)調(diào)整日志級別的方法,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
Java實(shí)現(xiàn)Excel與HTML互轉(zhuǎn)
Excel是一種電子表格格式,而HTM則是一種用于創(chuàng)建網(wǎng)頁的標(biāo)記語言,雖然兩者在用途上存在差異,但有時(shí)我們需要將數(shù)據(jù)從一種格式轉(zhuǎn)換為另一種格式,下面我們就來看看具體實(shí)現(xiàn)方法吧2025-01-01
Java鎖升級機(jī)制超詳細(xì)講解(附實(shí)例代碼)
Java中的synchronized鎖會經(jīng)歷一個(gè)從無鎖到偏向鎖,再到輕量級鎖,最后到重量級鎖的升級過程,這種優(yōu)化稱為鎖升級或鎖膨脹,這篇文章主要介紹了Java鎖升級機(jī)制超詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下2025-06-06
JAVA編程實(shí)現(xiàn)隨機(jī)生成指定長度的密碼功能【大小寫和數(shù)字組合】
這篇文章主要介紹了JAVA編程實(shí)現(xiàn)隨機(jī)生成指定長度的密碼功能,可生成帶有大小寫和數(shù)字組合的隨機(jī)字符串,需要的朋友可以參考下2017-07-07
Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之漢諾塔
漢諾塔是源于印度一個(gè)古老傳說的益智玩具。大梵天創(chuàng)造世界時(shí)做了三根石柱,在一根柱子上從下往上按大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規(guī)定,在小圓盤上不能放大圓盤,三根柱子之間一次只能移動一個(gè)圓盤2022-02-02
使用SpringBoot發(fā)送郵箱驗(yàn)證碼的簡單實(shí)現(xiàn)
這篇文章主要介紹了使用SpringBoot發(fā)送郵箱驗(yàn)證碼的簡單實(shí)現(xiàn),咱們今天來講使用QQ郵箱來發(fā)送和接收驗(yàn)證碼,首先來介紹一下它在SpringBoot項(xiàng)目中的具體應(yīng)用,需要的朋友可以參考下2023-04-04

