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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐巍 黑马帝   /  2012-3-22 16:55  /  1760 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

通配符<?>与泛型<T>之间有什么区别?
下面代码中:
import java.util.*;
class Person
{
        private String name;
        Person(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
}
class Student extends Person
{
        Student(String name)
        {
                super(name);
        }
}
class GenericDemo7
{
        public static void main(String[] args)
        {
                ArrayList<Person> al=new ArrayList<Person>();
                al.add(new Person("abc1"));
                al.add(new Person("abc2"));
                al.add(new Person("abc3"));
                al.add(new Person("abc4"));
                ArrayList<Student> al1=new ArrayList<Student>();
                al1.add(new Student("abc001"));
                al1.add(new Student("abc002"));
                al1.add(new Student("abc003"));
                al1.add(new Student("abc004"));
                printColl(al);
                printColl(al1);
        }
        public static void printColl(ArrayList<? extends Person> al)//这里<? extends Person>为什么不能写成<?>呢?
        {
                Iterator<? extends Person> it=al.iterator();
                while(it.hasNext())
                {
                        System.out.println(it.next().getName());
                }
        }
}

4 个回复

正序浏览
?代表未知类型。既然是未知类型你在后面的方法体中怎么调用getName方法呀。完整的应该再加一个instanceof判断是不是属于person类然后再迭代
回复 使用道具 举报
     类型限定:
    1,某种类型:没有通配符  <String>
    2,多种类型:不是只允许String类,而且允许其子类!<?extends Person> / <? super Person> /
                如:HashMap(Map<? extends k,? extends v> m)
    3,区间类型:是某个类的子类,但又是某个类的父类 <? extends XXX & super YYY >
    4,所有类型:<?> <T>
   
回复 使用道具 举报
<T>表示你只可以添加这个类。
<? extends Person> 表示你可以添加这个类的子类。
这里其实涉及到多态的用途了,其实就是父类引用指向子类对象,如果你用到的是父类和子类共有的方法,那么你就可以用<? extends>的形式。
回复 使用道具 举报
<?extends Person>表示泛型的上限是Person.如果往集合里添加对象时只能是Person和它的子类,不能是其它,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马