A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一直很安静 中级黑马   /  2013-11-13 10:22  /  1180 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static <T>void copy1(collection <T> c,T[ ] s){ }
public static <T>void copy2(T[ ] a,T[ ] s){ }
调用这两个函数时:
copy 1(new Vector <Date>( ),new String [10]);//这句话编译失败
copy 2(new Date[10],new String [10]);//这句编译没问题,说是因为把t当做object看,那为什么上一句不这样看呢。类型推断到底是怎么回事儿?求指教。

2 个回复

正序浏览
其实我也不是很明白,但是我把所有的T都换成了Object,得到的编译提示是
无法将Vector<Date>转换成Collection<Object>
你看下面两个例子:
1.ArrayList<Object> p=new ArrayList<String>();会编译失败
2.List<String> l=new ArrayList<String>();会编译成功
也就是说,你的Vector对象给Cllocetion引用没有问题,关键是这两个集合的元素要一样,甚至不可以是子父类关系
至于为什么这样,可能要看源码,了解一下内存才能知道为什么,现在我只是把它当做一个乌龟的屁股(规定)来记忆。
回复 使用道具 举报
FFF 金牌黑马 2013-11-14 21:11:56
沙发
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
{:soso_e149:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马