久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

java泛型中占位符T和?有什么區(qū)別

泛型中占位符T和?有什么區(qū)別?有的人可能弄不清楚,本文主要介紹了java泛型中占位符T和?有什么區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下

泛型中占位符T和?有什么區(qū)別?這是一個(gè)好問題,有的人可能弄不清楚,所以我們這里簡單的演示一下,相信大家一定能弄清楚的!

先上兩段代碼:

public static <T> void show1(List<T> list){
 for (Object object : list) {
        System.out.println(object.toString());
    }
}

public static void show2(List<?> list) {
    for (Object object : list) {
        System.out.println(object);
    }
}

可以看到show1方法中我們使用了T,大家都知道這是泛型的常見寫法,那么這里的T指的是某一類具體的對象,list集合里只能存放同一類型數(shù)據(jù),如果插入不同類型數(shù)據(jù)則會(huì)報(bào)錯(cuò)。

那么show2方法中我們使用的是?,可以看到在void前面并沒有<T>,?可以表示成占位符,它自己也不知道list集合中會(huì)存放多少種類型的數(shù)據(jù),所以這樣就表明我們的list中存放N種數(shù)據(jù)類型也是可以的。

我們通過一段測試代碼來直觀的感受一下二者的區(qū)別吧:

public static void test(){
   List<Student> list1 = new ArrayList<>();
   list1.add(new Student("zhangsan",18,0));
   list1.add(new Student("lisi",28,0));
   list1.add(new Student("wangwu",24,1));
   //這里如果add(new Teacher(...));就會(huì)報(bào)錯(cuò),因?yàn)槲覀円呀?jīng)給List指定了數(shù)據(jù)類型為Student
   show1(list1);

   System.out.println("************分割線**************");

   //這里我們并沒有給List指定具體的數(shù)據(jù)類型,可以存放多種類型數(shù)據(jù)
   List list2 = new ArrayList<>();
   list2.add(new Student("zhaoliu",22,1));
   list2.add(new Teacher("sunba",30,0));
   show2(list2);
}

來看看運(yùn)行結(jié)果:

Student{name='zhangsan', age=18, sex=0}
Student{name='lisi', age=28, sex=0}
Student{name='wangwu', age=24, sex=1}
************分割線**************
Student{name='zhaoliu', age=22, sex=1}
Teacher{name='sunba', age=30, sex=0}

從show2方法可以看出和show1的區(qū)別了,list2存放了Student和Teacher兩種類型,同樣可以輸出數(shù)據(jù),所以這就是T和?的區(qū)別啦~小伙伴們了解了吧

下面來看看?的擴(kuò)展寫法:

List<? extends 數(shù)據(jù)類型> list

public static void show3(List<? extends Teacher> list) {
    for (Object object : list) {
        System.out.println(object);
    }
}

List<? extends Teacher> list這種寫法表示可以接收Teacher和它的子類數(shù)據(jù)類型的list集合,寫個(gè)測試方法show3(list2);試試:

Student{name='zhaoliu', age=22, sex=1}
Teacher{name='sunba', age=30, sex=0}

可以看到正常輸出,因?yàn)榧现械臄?shù)據(jù)都是Teacher的子類類型,如果我們將List<? extends Teacher> list改成List<? extends Student> list會(huì)出現(xiàn)什么情況?

仔細(xì)看這張圖,我們新建了一個(gè)list3并且聲明數(shù)據(jù)類型為Teacher,這個(gè)時(shí)候調(diào)用show3(List<? extends Student> list) 就馬上會(huì)報(bào)錯(cuò)的,錯(cuò)誤信息提示Teacher不能轉(zhuǎn)換成Student,因?yàn)镾tudent是Teacher的子類,而我們只接受Student及它的子類,所以當(dāng)然會(huì)報(bào)錯(cuò)了。

List<? super 數(shù)據(jù)類型> list

這種寫法表示只接收指定的數(shù)據(jù)類型及它的父類類型,也簡單的寫段代碼看看效果:

public static void show4(List<? super Student> list) {
    for (Object object : list) {
        System.out.println(object);
    }
}

可以看出來,我們接收的是Student及它父類的集合,我們寫兩個(gè)集合數(shù)據(jù)然后調(diào)用試試。

List list4 = new ArrayList<>();
list4.add(new Student("sunba",30,0));
list4.add(new Teacher("zhaoliu",22,1));
show4(list4);

在list中插入了一個(gè)Student和Teacher對象,看看結(jié)果:

Student{name='sunba', age=30, sex=0}
Teacher{name='zhaoliu', age=22, sex=1}

沒毛病,正常運(yùn)行并輸出。

下面我們來看看,如果我們是傳遞的 Student的子類的集合會(huì)咋樣

可以看到和之前的一樣,會(huì)報(bào)錯(cuò),理由也是一樣的,以為我們已經(jīng)定義了只能接收Student及其父類的數(shù)據(jù)類型。

最后來看一種情況

如果我定義List的時(shí)候沒有指定數(shù)據(jù)類型,并且插入了一個(gè)Child,Student,Teacher,還是調(diào)用show4(List<? super Student> list),會(huì)報(bào)錯(cuò)嗎?不會(huì)報(bào)錯(cuò),運(yùn)行結(jié)果又會(huì)是什么呢?

可以看到這樣并沒有報(bào)錯(cuò),因?yàn)閘ist可以存放多種數(shù)據(jù)類型,那么調(diào)用show4方法時(shí)會(huì)是什么結(jié)果呢?

可以看到程序正常運(yùn)行并輸出結(jié)果,注意一點(diǎn),我們接收的是Student及其父類對象數(shù)據(jù)類型,因?yàn)槲覀兊腃hild是繼承Student的,所以程序自動(dòng)將我們的Child轉(zhuǎn)成父類Student進(jìn)行輸出,所以大家要注意這一點(diǎn),會(huì)自動(dòng)向上轉(zhuǎn)化。

總結(jié)

相信大家看了這個(gè)以后一定再也不會(huì)弄混二者的區(qū)別了吧,他們倆還是很容易弄清楚的,這些東西只要弄清楚了以后就也忘不掉了

到此這篇關(guān)于java泛型中占位符T和?有什么區(qū)別的文章就介紹到這了,更多相關(guān)java泛型占位符T和?內(nèi)容請搜索html5模板網(wǎng)以前的文章希望大家以后多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

主站蜘蛛池模板: 免费观看全黄做爰视频 | 久本草精品 | 青青草国产成人av片免费 | 久久精品一区二区三区不卡牛牛 | 三级免费观看 | 青草久久久 | 婷婷99 | 黄色a一级| 国产亚洲欧美在线 | 91精品国产乱码久久久 | 日本成人黄色 | 一级片免费在线观看 | 日本在线视频一区二区 | 免费精品视频 | 亚洲成a人| 亚洲欧美在线播放 | 国产欧美精品一区二区三区 | 久久久久久久久久国产 | 成人福利在线观看 | 亚洲激情自拍 | 99久久婷婷国产综合精品草原 | av片在线看 | 风间由美一区二区三区 | 国产区视频在线观看 | 在线色综合 | 伊人精品久久 | 黄色av观看| 91激情网 | 日本亚洲精品 | 国产视频一二三 | 亚洲精品一区二区三区在线 | 国产精品久久久久久久久久久久久久 | 欧美一级黄色片 | 91亚色视频| 亚洲激情综合网 | 一级黄色片免费看 | 亚洲欧美第一页 | 成年在线观看 | 露出调教羞耻91九色 | 亚洲成人免费网站 | 黄色在线观看网址 |