手机
当前位置:查字典教程网 >编程开发 >Java >Java泛型类型通配符和C#对比分析
Java泛型类型通配符和C#对比分析
摘要:c#的泛型没有类型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM并不支持泛型,只是语法糖,在编译器编译的时候都转换成ob...

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泛型类型通配符和C#对比分析】相关文章:

Java方法的覆盖与隐藏的区别分析

Java中子类调用父类构造方法的问题分析

Java线程的相关方法详细解析

java 抽象类和接口的区别详细解析

Java中的String对象数据类型全面解析

深入Java分布式计算的使用分析

java类型生命周期的详细解析

基于java内部类作用的深入分析

java中的移位运算符心得总结

基于java中泛型的总结分析

精品推荐
分类导航