黑马程序员技术交流社区
标题:
泛型,下限问题
[打印本页]
作者:
jkenny
时间:
2014-3-6 17:40
标题:
泛型,下限问题
import java.util.*;
class Person
{
private String name;
Person(String name){
this.name=name;
}
public String getName(){
return name;
}
}
class A extends Person
{
A(String name){
super(name);
}
}
public class Test
{
public static void main(String[] args)
{
TreeSet<Person> ts=new TreeSet<Person>(new MyCompare());
ts.add(new Person("Person01"));
ts.add(new Person("Person04"));
ts.add(new Person("Person03"));
TreeSet<A> ts1=new TreeSet<A>(new MyCompare());
ts1.add(new A("A01"));
ts1.add(new A("A04"));
ts1.add(new A("A03"));
printTS(ts1);
}
//为什么使用<? super A>就会出现找不到:方法 getName()
//A类和A类的父类也都有getName()方法啊。
public static void printTS(TreeSet<? super A> ts){
for(Iterator<? super A> itr=ts.iterator();itr.hasNext();){
System.out.println(itr.next().getName());
//这里将getName(),改成toString()就不会有问题。
//那么是不是可以理解编译时找A的父类不是找到Person,而是找到了Object
//所以才没找到方法 getName()
}
}
/*
//使用<? extends A>就没有问题,因为A类中有getName()方法。
public static void printTS(TreeSet<? extends A> ts){
for(Iterator<? extends A> itr=ts.iterator();itr.hasNext();){
System.out.println(itr.next().getName());
}
}
*/
}
class MyCompare implements Comparator<Person>
{
public int compare(Person o1,Person o2){
return o2.getName().compareTo(o1.getName());
}
}
复制代码
作者:
asvsass
时间:
2014-3-6 18:09
本帖最后由 asvsass 于 2014-3-6 18:11 编辑
? Super A 就是说A的父类都可以 Itr.next 返回的是Object类型 要强转换成 Person就可以了 Object就没有getName方法 所以不行
? extends A 就是说A的子类都可以 Itr.next 返回的是A类型 A的类型肯定有getName方法 所以可以
public static void printTS(TreeSet<? super A> ts){
for(Iterator<? super A> itr=ts.iterator();itr.hasNext();){
System.out.println(((Person)itr.next()).getName());
//这里将getName(),改成toString()就不会有问题。
//那么是不是可以理解编译时找A的父类不是找到Person,而是找到了Object
//所以才没找到方法 getName()
}
}
半你修改了下 红色的部分
作者:
syw02014
时间:
2014-3-6 19:11
如果只指定了<?>,而没有extends,则默认是允许Object及其下的任何Java类了。也就是任意类。
通配符泛型不单可以向下限制,如<? extends Collection>,还可以向上限制,如<? super Double>,表示类型只能接受Double及其上层父类类型,如Number、Object类型的实例。
泛型类定义可以有多个泛型参数,中间用逗号隔开,还可以定义泛型接口,泛型方法。这些都与泛型类中泛型的使用规则类似。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2