当前位置: 移动技术网 > IT编程>开发语言>Java > Java泛型类型通配符和C#对比分析

Java泛型类型通配符和C#对比分析

2019年07月22日  | 移动技术网IT编程  | 我要评论

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#对比分析全部内容了,希望大家多多支持移动技术网~

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网