Java泛型類型通配符和C#比較剖析。本站提示廣大學習愛好者:(Java泛型類型通配符和C#比較剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是Java泛型類型通配符和C#比較剖析正文
c#的泛型沒有類型通配符,緣由是.net的泛型是CLR支撐的泛型,而Java的JVM其實不支撐泛型,只是語法糖,在編譯器編譯的時刻都轉換成object類型
類型通配符在java中表現的是泛型類型的父類
public void test(List<Object> c) { for(int i = 0;i < c.size();i++) { System.out.println(c.get(i)); } }
//創立一個List<String>對象 List<String> strList = new ArrayList<String>(); //將strList作為參數來挪用後面的test辦法 test(strList);
編譯下面的法式,test(strList) 處將產生編譯毛病,意味著不克不及把List<String> 當做List<Object> 的子類. 這時候候就須要應用類型通配符了,通配符是一個?號
下面的List<Object>換成List<?>便可以經由過程編譯了
public void test(List<?> c) { for(int i = 0;i < c.size();i++) { System.out.println(c.get(i)); } }
List<String> 可以作為 List<?> 的子類來應用, List<?> 則可作為任何List 類型的父類應用,
假如只想作為List<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類或其子類,並必需完成java.io.Serializable接口 Public class Apple<T extends Number & java.io.Serializable> {}
以上就是小編為年夜家帶來的Java泛型類型通配符和C#比較剖析全體內容了,願望年夜家多多支撐~