黑马程序员技术交流社区
标题:
关于泛型参数化的问题?
[打印本页]
作者:
孙涛00
时间:
2013-10-29 13:03
标题:
关于泛型参数化的问题?
Vector<String> vect = new Vector();//编译通过,正确
Vector vect2 = new Vector<String>();//编译通过,正确
Vector<Object> vect3 = new Vector<String>();//编译失败,错误
Vector v1 = new Vector<String>();//编译通过,正确
Vector<Object> v = v1;//编译通过,正确
问题:Vector<Object> v = v1;//编译通过,正确 为什么是正确的?和第三个编译失败额那个有什么区别?
作者:
未知数|X|
时间:
2013-10-29 13:10
你 可以这样理解,第一个Vector<Object> vect3 = new Vector<String>();//编译失败,错误,这个是因为你前面已经标明了是一个Object说明是什么类型都可以存,后面有给一个字符串的类型,所以会错误, Vector v1 = new Vector<String>();//编译通过,正确
Vector<Object> v = v1;//编译通过,正确
后面那个正确是因为你后面那个 Vector<Object>它可以接收任意类型,而Vector v1 = new Vector<String>();存的是字符串,你把一个存的是字符串的赋给了一个Object有什么不妥吗,不知道这样理解对不对
作者:
孙涛00
时间:
2013-10-29 18:44
还是,不是很明白!
作者:
狼王
时间:
2013-10-29 19:18
之所以第三个编译失败是因为:虽然Object是String的父类,但对于泛型来讲,Vector<Object> 却不是Vector<String>的父类,那么Vector<String>的父类是谁呢?是Vector<?>,所以编译失败。
为什么第四行编译成功?泛型作为JDK1.5的新特性,为了与老代码的兼容,参数化类型与原始类型可以相互引用:
Vector v1 = new Vector<String>();
Vector<Object> v = v1;
咱们不能把它看成称一行,为了兼容所以不报错,但编译器会报警告。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2