html5中文学习网

您的位置: 首页 > 网络编程 > java教程 » 正文

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

[ ] 已经帮助:人解决问题

c#的泛型没有类型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM并不支持泛型,只是语法糖,在编译器编译的时候都转换成object类型PwpHTML5中文学习网 - HTML5先行者学习网
PwpHTML5中文学习网 - HTML5先行者学习网

类型通配符在java中表示的是泛型类型的父类PwpHTML5中文学习网 - HTML5先行者学习网

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> 的子类. 这时候就需要使用类型通配符了,通配符是一个?号PwpHTML5中文学习网 - HTML5先行者学习网
PwpHTML5中文学习网 - HTML5先行者学习网

上面的List<Object>换成List<?>就可以通过编译了PwpHTML5中文学习网 - HTML5先行者学习网

public void test(List<?> c)  {     for(int i = 0;i < c.size();i++)     {         System.out.println(c.get(i));     }  }  

List<String> 可以作为 List<?> 的子类来使用, List<?> 则可作为任何List 类型的父类使用,PwpHTML5中文学习网 - HTML5先行者学习网

如果只想作为List<String>的父类,而不是List<int>呢,? 写成这样 List<? extends String>PwpHTML5中文学习网 - HTML5先行者学习网

在C#中约束泛弄类型是这样PwpHTML5中文学习网 - HTML5先行者学习网

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 中约束泛型通配符上限:PwpHTML5中文学习网 - HTML5先行者学习网

//表明T类型必须是Number类或其子类,并必须实现java.io.Serializable接口  Public class Apple<T extends Number & java.io.Serializable>  {}  

以上就是小编为大家带来的Java泛型类型通配符和C#对比分析全部内容了,希望大家多多支持脚本之家~PwpHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助