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#比較剖析全體內容了,願望年夜家多多支撐~