黑马程序员技术交流社区

标题: 关于泛型参数化的问题? [打印本页]

作者: 孙涛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