黑马程序员技术交流社区
标题:
泛型的问题,球解决啊啊啊
[打印本页]
作者:
ccyznhy
时间:
2013-8-26 17:06
标题:
泛型的问题,球解决啊啊啊
本帖最后由 杨增坤 于 2013-8-27 22:14 编辑
public static void printCollection(Collection<Object> cols){
for(Object obj:cols){
System.out.println(obj);
}
cols.add("String");//没错
//cols=new HashSet<Date>();//会报告错误?
}
public static void printCollection1(Collection<?> cols){
for(Object obj:cols){
System.out.println(obj);
}
//cols.add("String");//错误,因为它不知自己未来匹配就一定是String。
cols.size();//没错
cols=new HashSet<Date>();//会报告错误?
}
}
?通配符的作用一直不太懂,希望各路大神通过代码解决,
作者:
白磊
时间:
2013-8-26 17:27
你这个代码不全不好整吧。
对于你说的泛型中的通配符,是这样的:它这样写 <?> 意思是还没有确定类型,你可以给集合里面加随便哪种对象,但是如果<>里面确定了具体类型,就只能王集合里添加这种确定的对象。
作者:
$love
时间:
2013-8-26 17:41
Collection<Object> cols=new HashSet<Date>();
==》你只要记住:类型参数是不涉及到继承关系的。也就是左边的类型参数是<Object>的,而右边<Date>所以会报错
作者:
梦航
时间:
2013-8-26 17:45
cols属于Collection<Object>类型,而你通过new HashSet<Date>()得到的是 HashSet<Date>类型,HashSet<Date>并不属于Collection<Object>类或其子类,所以会报告错误
当使用通配符"?"时,元素类型可以匹配任何类型,类型是不确定的。 但是因为程序不知道cols集合里元素的类型,所以不能向其中添加对象。但有一种例外就是null,它是所有引用类型的实例
祝编程愉快!
作者:
binghaiwang
时间:
2013-8-27 10:00
public static void printCollection(Collection<Object> cols){
for(Object obj:cols){
System.out.println(obj);
}
cols.add("String");//没错
//cols=new HashSet<Date>();//会报告错误?
//你这个函数参数中的集合已指定了泛型,因此再新建一个新的对象泛型不同是不可以的,
//记住泛型是不存在子父类的继承关系的
}
public static void printCollection1(Collection<?> cols){
for(Object obj:cols){
System.out.println(obj);
}
//cols.add("String");//错误,因为它不知自己未来匹配就一定是String。
/*这里报错是因为,你传入的参数没泛型是一个通配符,也就是说你也不知道今后需要传入
什么参数,因此如果你使用添加方法就不合理,比如说我调用你的方法,传入一个数字类型
那么你这个添加String 类型的方法虚拟机就疯了。*/
cols.size();//没错
cols=new HashSet<Date>();//会报告错误?
//这里不会报错
}
复制代码
作者:
code_geass
时间:
2013-8-27 11:47
通告的是Object。你new hashset定义的就是Date。你知道小范围String不能适用Object。Date就不是小范围了?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2