黑马程序员技术交流社区

标题: 关于泛型通配符?扩展的一些问题 [打印本页]

作者: wssjdysf    时间: 2013-11-19 02:54
标题: 关于泛型通配符?扩展的一些问题
            Vector<? extends Number> a = new Vector<Integer>();
            a.add(new Integer(23));//为什么这个报错,我想往a里面添加一个东西怎么做
            a.add(new Double(11.1));//这个也报错,不是说可以装Number的子类吗?
            Vector<? super Number> a2 = new Vector<Object>();
            a2.add(new Integer(23));//为什么这样写还对了(Integer是Number的子类)
            a2.add(new Double(11.1));//(Double是Number的子类)
//         Vector<? extends Number> b = new Vector<String>();
            Vector<? super Integer> c = new Vector<Number>();
            c.add(23);
            c.add(new Long(123l));//Long是Number的子类,怎么又错啊
问题多,还有点乱。。。我现在头也乱了
作者: 陈文杰    时间: 2013-11-19 04:18
class Text3{
        public static void main(String[] args){
                demo<String> d = new demo<String>();
                d.setName("a");
                System.out.println(d.getName());
                //demo<?> d1 表示它可接收demo类中泛型类型为任意引用类型的demo对象的引用。
                //此处它的用法类似于多态
                demo<?> d1 = d;

                //这里可以取值,是因为该方法是与泛型类型参数无关的方法(该方法不用接收泛型类型参数)。
                //也就是说:你上面因事先就声明了它里面的类型,里面声明的什么类型,
                //我调用该方法时就返回什么类型就行了。
                System.out.println(d1.getName());

                //这里不能赋值是因为,d1中的泛型类型为不具体类型,
                //也就是说,连它自己都不知道它中的泛型类型是什么
                //具体类型(它不知道自己是什么类型的,并不表示你就可以像其中放任何引用类型),
                //你怎么能给它赋String类型的呢?
                d1.setName("sss");
        }
}
class demo<T>{
        private T name;
        public T getName()
        {
                return name;
        }
        public void setName(T name)
        {
                this.name = name;
        }
}

作者: 黄炳期    时间: 2013-11-19 12:42
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html




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