Java泛型類型通配符和C#對(duì)比分析
c#的泛型沒(méi)有類型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM并不支持泛型,只是語(yǔ)法糖,在編譯器編譯的時(shí)候都轉(zhuǎn)換成object類型
類型通配符在java中表示的是泛型類型的父類
public void test(List<Object> c) { for(int i = 0;i < c.size();i++) { System.out.println(c.get(i)); } }
//創(chuàng)建一個(gè)List<String>對(duì)象 List<String> strList = new ArrayList<String>(); //將strList作為參數(shù)來(lái)調(diào)用前面的test方法 test(strList);
編譯上面的程序,test(strList) 處將發(fā)生編譯錯(cuò)誤,意味著不能把List<String> 當(dāng)成List<Object> 的子類. 這時(shí)候就需要使用類型通配符了,通配符是一個(gè)?號(hào)
上面的List<Object>換成List<?>就可以通過(guò)編譯了
public void test(List<?> c) { for(int i = 0;i < c.size();i++) { System.out.println(c.get(i)); } }
List<String> 可以作為 List<?> 的子類來(lái)使用, List<?> 則可作為任何List 類型的父類使用,
如果只想作為L(zhǎng)ist<String>的父類,而不是List<int>呢,? 寫成這樣 List<? extends String>
在C#中約束泛弄類型是這樣
class MyClass<T, U> where T : class where U : struct {}
interface IMyInterface { } class Dictionary<TKey, TVal> where TKey : IComparable, IEnumerable where TVal : IMyInterface { public void Add(TKey key, TVal val) { } }
Java 中約束泛型通配符上限:
//表明T類型必須是Number類或其子類,并必須實(shí)現(xiàn)java.io.Serializable接口 Public class Apple<T extends Number & java.io.Serializable> {}
以上就是小編為大家?guī)?lái)的Java泛型類型通配符和C#對(duì)比分析全部?jī)?nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟
這篇文章主要介紹了手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java guava monitor監(jiān)視器線程的使用詳解
工作中的場(chǎng)景中是否存在類似這樣的場(chǎng)景,需要提交的線程在某個(gè)觸發(fā)條件下執(zhí)行。本文主要就是使用guava中的monitor來(lái)優(yōu)雅的實(shí)現(xiàn)帶監(jiān)視器的線程2021-11-11Java中volatile關(guān)鍵字的線程的可見性、有序性詳解
這篇文章主要介紹了Java中volatile關(guān)鍵字的線程的可見性、有序性詳解,在juc多線程并發(fā)編程中,常常需要關(guān)注線程的"可見性"與"有序性",本文將詳細(xì)介紹這兩部分內(nèi)容,以及volatile關(guān)鍵字的使用,需要的朋友可以參考下2024-01-01Java的Struts框架簡(jiǎn)介與環(huán)境配置教程
這篇文章主要介紹了Java的Struts框架與其環(huán)境配置教程,Struts框架是Java注明的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-11-11springboot之Validation參數(shù)校驗(yàn)詳細(xì)解讀
這篇文章主要介紹了springboot之Validation參數(shù)校驗(yàn)詳細(xì)解讀,本篇是關(guān)于springboot的參數(shù)校驗(yàn)知識(shí),當(dāng)然也適用其它java應(yīng)用,讀完本篇將學(xué)會(huì)基本的參數(shù)校驗(yàn),自定義參數(shù)校驗(yàn)和分組參數(shù)校驗(yàn),需要的朋友可以參考下2023-10-10RestTemplate在Spring或非Spring環(huán)境下使用精講
這篇文章主要為大家介紹了RestTemplate在Spring或非Spring環(huán)境下使用精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03java創(chuàng)建jar包并被項(xiàng)目引用步驟詳解
這篇文章主要介紹了java創(chuàng)建jar包并被項(xiàng)目引用步驟詳解,jar包實(shí)現(xiàn)了特定功能的,java字節(jié)碼文件的壓縮包,更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-07-07