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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张健 中级黑马   /  2012-5-28 19:22  /  1942 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Vector<Object> v = new Vector<String>(); 编译器会报错误,因为参数化类型不考虑类型参数的继承关系。
但为什么这样写编译器就能通过呢?
Vector v1 = new Vector<String>();  
Vector<Object> v = v1;
有点不太明白,请高手解释一下原因。 谢谢!

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
本帖最后由 李哲 于 2012-5-28 19:51 编辑

泛型只是给编译器使用,但是编译器不知道v1包含什么元素,也就不会报错。
回复 使用道具 举报
本帖最后由 赵玮_Tom 于 2012-5-28 22:08 编辑

编译过程只是严格检查语法。第一句编译不报错是因为没有参数化类型的引用可以接收参数化类型的实例,第二据编译不报错是因为对编译器而言,无参数化的变量也是可以赋值给参数化的变量的。而如果两句合并为一句,肯定要报错,因为泛型是不存在继承关系的。因为平时我们看程序时,已经形成了运行程序代码的习惯,所以很容易产生误区。

点评

Vector v1 = new Vector<String>(); Vector<Integer> v = v1; 即使这样,也是不会报错的。  发表于 2012-5-28 20:10

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马