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

© wssjdysf 中级黑马   /  2013-11-19 02:54  /  1538 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

            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的子类,怎么又错啊
问题多,还有点乱。。。我现在头也乱了

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

3 个回复

倒序浏览
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;
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马