Java泛型类型通配符和C#对比分析
程序员文章站
2024-03-12 20:49:26
c#的泛型没有类型通配符,原因是.net的泛型是clr支持的泛型,而java的jvm并不支持泛型,只是语法糖,在编译器编译的时候都转换成object类型
类型通配符在...
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#对比分析全部内容了,希望大家多多支持~
上一篇: Java语言打印九九乘法表