你的代码太多,我就不全部复制了.有几个地方要改
修正后的:
class StuComp<T extends Person> implements Comparator<T>
{
public int compare(T s1,T s2)
{
return s1.getName().compareTo(s2.getName());
}
}
我想你的意图是要让这个比较器对Person的所有子类都可以进行比较吧?
你的代码:class StuComp implements Comparator<? super Student>
{
public int compare(Student s1,Student s2)
{
return s1.getName().compareTo(s2.getName());
}
}
TreeSet<Student> ts = new TreeSet<Student>(new StuComp<Student>());//调用比较器时,将实际类型Student传入.
1.你原来的泛型是限定为Person的父类,但是你想想,Object是不是Person的父类呢?Object怎么会有Person的getName方法?编译器也意识到这点,所以不让你通过.
2.如果你在泛型类中需要用到传入类型对象的方法时,就不要用通配符?了,而是用一个大写字母表示类型参数.
3.如果泛型需要限定类型,就在类名后面完成这个动作,然后将类型参数传给接口,貌似接口不接收限定类型参数,这点我也要找找资料.
改过以后,我编译了一次,是成功的.
亲,记得给好评哦~{:soso_e112:}
|