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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何明辉 中级黑马   /  2012-8-29 19:22  /  2304 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这里我就不写程序了,写了下面的语句,能看懂就行!
Class<String> p2=Class<String>.forName("java.lang.String");
该语句报错。
API中写的方法是:public static Class<?> forName(String className);
我用实参类型String赋给对应的通配符?怎么不行了。
老师说的是可以用具体实参类型赋给通配符?啊,
求高手详细的讲解一下实参类型赋给对应的通配符?时应该注意哪些事项。

2 个回复

倒序浏览
关于通配符的总结 给楼主看看 看看就懂了       
           对集合中的元素进行迭代的功能,因为打印集合中的元素类型是不确定的,无法明确,可以使用泛型中的通配符来完成,该通配符用?来标示,
        如果要对操作的类型进行限定,只操作一部分类型时,可以使用泛型的高级功能,泛型的限定。
        ? Extends E:可以接收E类型和E的子类型。
        ? SuperE:可以接收E了性或者E的父类型。
        实现代码:
        Public static void printCollection(Collection<? Extedns Person> coll){
        Iterator<? extends Person> it = coll.iterator();
                        while(it.hasNext()){
        //                        Student stu = it.next();
                                Person p = it.next();
                                System.out.println(p.getName()+"-----"+p.getAge());
                        }               
        }
       
什么时候使用E extends?
        一般在存储具体引用类型时使用这种情况,因为存储E类型或者E类型的子类,这时可以保证类型是安全的。
        实现代码:
        public static void main(String[] args) {
       
                        Collection<Person> coll = new ArrayList<Person>();               
                        coll.add(new Person("abc1",21));
                        coll.add(new Person("abc2",22));
                       
                        Collection<Student> coll2 = new ArrayList<Student>();
                        coll2.add(new Student("lisi1",31));
                        coll2.add(new Student("lisi2",32));
                        coll2.add(new Student("lisi3",33));
                       
                        Collection<Worker> coll3 = new ArrayList<Worker>();
                        coll3.add(new Worker("lisi11",31));
                        coll3.add(new Worker("lisi22",32));
                       
                       
                        coll.addAll(coll2);
                        coll.addAll(coll3);
                        Iterator<Person> it = coll.iterator();
                       
                        while(it.hasNext()){
                               
                                Person stu = it.next();
                                System.out.println(stu.getName());
                        }
                       
                }
       
泛型下限:
        下限什么时候用?
        从集合中取出对象进行操作时,可以使用下限。比如:比较器。无论集合中的元素对象的类型是什么,只要比较器的指定的类型可以接受这些对象完成比较,就可以了。所以比较器的类型,可以是集合中当前元素的类型,也是可以该元素类型的父类型。
回复 使用道具 举报
曹昌 发表于 2012-8-29 20:25
关于通配符的总结 给楼主看看 看看就懂了       
           对集合中的元素进行迭代的功能,因为打印集合中的元 ...

你好,很感谢能帮我解答,这个我已经明白,但是变量类型进行参数传递实参时怎么出现了问题,因为?代表通配符嘛,将实参赋给通配符怎么不行了,就我那个表达式来分析。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马