程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java泛型類型通配符和C#比較剖析

Java泛型類型通配符和C#比較剖析

編輯:關於JAVA

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved