黑马程序员技术交流社区
标题:
关于泛型限定的问题
[打印本页]
作者:
唐巍
时间:
2012-3-22 16:55
标题:
关于泛型限定的问题
通配符<?>与泛型<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());
}
}
}
作者:
和心愿
时间:
2012-3-22 17:02
<?extends Person>表示泛型的上限是Person.如果往集合里添加对象时只能是Person和它的子类,不能是其它,
作者:
张锐
时间:
2012-3-22 17:17
<T>表示你只可以添加这个类。
<? extends Person> 表示你可以添加这个类的子类。
这里其实涉及到多态的用途了,其实就是父类引用指向子类对象,如果你用到的是父类和子类共有的方法,那么你就可以用<? extends>的形式。
作者:
OMG
时间:
2012-3-22 20:49
类型限定:
1,某种类型:没有通配符 <String>
2,多种类型:不是只允许String类,而且允许其子类!<?extends Person> / <? super Person> /
如:HashMap(Map<? extends k,? extends v> m)
3,区间类型:是某个类的子类,但又是某个类的父类 <? extends XXX & super YYY >
4,所有类型:<?> <T>
作者:
王杰
时间:
2012-3-22 21:12
?代表未知类型。既然是未知类型你在后面的方法体中怎么调用getName方法呀。完整的应该再加一个instanceof判断是不是属于person类然后再迭代
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2