黑马程序员技术交流社区
标题:
使用泛型下线时出现问题,求解答。
[打印本页]
作者:
caobin
时间:
2014-12-5 20:16
标题:
使用泛型下线时出现问题,求解答。
使用<? extend E>是功能正常,但是使用<? super E>时却出现问题,提示如下:
QQ图片20141205201251.jpg
(37.73 KB, 下载次数: 5)
下载附件
2014-12-5 20:12 上传
难道是<? super Student>将类型转成了Object ,Object中没有getName()方法导致报错的?那泛型的下限正确使用方式是什么呢?
对于泛型下限也没怎么使用过,希望熟悉的同学帮忙解答一下。
import java.util.*;
class GenericDemo7
{
public static void main(String[] args)
{
TreeSet<Student> ts = new TreeSet<Student>(new Comp());
ts.add(new Student("Student.szhangsan"));
ts.add(new Student("Student.slisi"));
ts.add(new Student("Student.swangwu"));
//ts.add(new Person("Person.zhangsan"));
//ts.add(new Person("Person.lisi"));
//ts.add(new Person("Person.wangwu"));
printColl(ts);
}
public static void printColl(TreeSet<? super Student> ts)
{
Iterator<? super Student> it = ts.iterator();
while(it.hasNext())
{
System.out.println(it.next().getName());
}
}
}
class Comp implements Comparator<Person>
{
public int compare(Person p1,Person p2)
{
return p1.getName().compareTo(p2.getName());
}
}
class Person
{
private String name;
public Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
class Student extends Person
{
public Student(String name)
{
super(name);
}
}
复制代码
作者:
cs8630323
时间:
2014-12-5 20:46
本帖最后由 cs8630323 于 2014-12-6 07:47 编辑
it.next()返回值类型为student和它的父类,不能确定这个类型一定有getName方法
作者:
kerner
时间:
2014-12-5 22:01
Student的父类不一定具有Student的方法。
但是Student的子类一定具有Student的方法。
作者:
水竹
时间:
2014-12-5 22:09
你没搞清楚下限的用法,给你个例子看看:TreeSet的那个需要传个Comparator的构造方法。
不要为了用而用,要到该用的时候再用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2