黑马程序员技术交流社区

标题: 类型推断问题 [打印本页]

作者: 一直很安静    时间: 2013-11-13 10:22
标题: 类型推断问题
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看,那为什么上一句不这样看呢。类型推断到底是怎么回事儿?求指教。
作者: FFF    时间: 2013-11-14 21:11
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
{:soso_e149:}
作者: spiderman    时间: 2013-11-15 19:30
其实我也不是很明白,但是我把所有的T都换成了Object,得到的编译提示是
无法将Vector<Date>转换成Collection<Object>
你看下面两个例子:
1.ArrayList<Object> p=new ArrayList<String>();会编译失败
2.List<String> l=new ArrayList<String>();会编译成功
也就是说,你的Vector对象给Cllocetion引用没有问题,关键是这两个集合的元素要一样,甚至不可以是子父类关系
至于为什么这样,可能要看源码,了解一下内存才能知道为什么,现在我只是把它当做一个乌龟的屁股(规定)来记忆。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2