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>
{}

最新文章

  1. Django进阶(三)
  2. C语言程序设计第一次作业
  3. C语言实现二叉树
  4. 通过修改host文件来允许和禁止主机的访问
  5. iOS 改变tableview cell的背景色
  6. JAVA多线程实现简单的点名系统
  7. ruby编程语言-学习笔记5(第5章 语句和控制结构)
  8. Ural 1332 把圆细分+圆内切,内含关系判定
  9. 安装配置MongoDB
  10. 【课上OJ】判断密码强度
  11. HDU 1335 Basically Speaking(进制转换)
  12. 笑谈ArcToolbox (3) ArcToolbox的一亩三分地
  13. CentOS下安装yum源的流程和操作
  14. Yii的操作提示框
  15. 实验吧debug
  16. 每日英语:Redfin Real-Estate Firm Gets Cold Shoulder in Silicon Valley
  17. Fiddler Web Debugger是什么?(图文详解)
  18. 关于Cooperation.GTST
  19. python中GUI使用小结
  20. 《剑指offer》— JavaScript(9)变态跳台阶

热门文章

  1. [NOIP2015普及组]推销员
  2. python 比较数字大小按从大到小输出
  3. jsp页面跳转的路径问题
  4. 紫书 习题 11-16 UVa 1669(树形dp)
  5. Jedis无法连接centOS7上的redis
  6. maven的setting设置
  7. UVALive 6084 Happy Camper(数学题)
  8. MAVEN自己主动部署到tomcat
  9. MYSQL学习笔记三:日期和时间函数
  10. Crytek的幕后花絮