Java泛型类型通配符和C#对比分析
c#的泛型没有类型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM并不支持泛型,只是语法糖,在编译器编译的时候都转换成object类型
类型通配符在java中表示的是泛型类型的父类
publicvoidtest(List<Object>c)
{
for(inti=0;i<c.size();i++)
{
System.out.println(c.get(i));
}
}
//创建一个List<String>对象 List<String>strList=newArrayList<String>(); //将strList作为参数来调用前面的test方法 test(strList);
编译上面的程序,test(strList)处将发生编译错误,意味着不能把List<String>当成List<Object>的子类.这时候就需要使用类型通配符了,通配符是一个?号
上面的List<Object>换成List<?>就可以通过编译了
publicvoidtest(List<?>c)
{
for(inti=0;i<c.size();i++)
{
System.out.println(c.get(i));
}
}
List<String>可以作为List<?>的子类来使用,List<?>则可作为任何List类型的父类使用,
如果只想作为List<String>的父类,而不是List<int>呢,?写成这样List<?extendsString>
在C#中约束泛弄类型是这样
classMyClass<T,U>
whereT:class
whereU:struct
{}
interfaceIMyInterface
{
}
classDictionary<TKey,TVal>
whereTKey:IComparable,IEnumerable
whereTVal:IMyInterface
{
publicvoidAdd(TKeykey,TValval)
{
}
}
Java中约束泛型通配符上限:
//表明T类型必须是Number类或其子类,并必须实现java.io.Serializable接口
PublicclassApple<TextendsNumber&java.io.Serializable>
{}
以上就是小编为大家带来的Java泛型类型通配符和C#对比分析全部内容了,希望大家多多支持毛票票~