我正在我的班级Employee中实现Comparator和Comparable来对一个arraylist进行排序。我正在排序2参数名称和ID。使用Collections.sort(Employee ob1,Employee ob2)使用ID进行排序时,它不起作用。我得到编译错误,该类没有声明为abstact,我没有重写compare(),虽然我这样做:
public int compare(Employee ob1, Employee ob2)
{
return ob1.id-ob2.id;
}
如果我使用
,它可以正常工作public int compare(Object ob1, Object ob2)
{
return ((Employee)ob1).id-((Employee)ob2).id;
}
我怀疑的是,为什么早期的工作不起作用,因为Employee也是一个Object。 同样的问题也是compareTo(Object ob),虽然重写为什么我不能直接使用Employee,为什么我需要在那里使用Object,以后需要将它转换为Employee类。
答案 0 :(得分:5)
使用Object,Object的多态性覆盖Comparator中的原始类型。使用您的类名称与该签名不匹配。对于混合签名时的编译错误,请使用模板类型。
public class Employee implements Comparator<Employee> {
// ....
@Override
public int compare(Employee ob1, Employee ob2) {
return ob1.id-ob2.id;
}
}
答案 1 :(得分:0)
您需要实现接口定义的确切方法。 如果您想直接使用对象,请使用&lt;&gt;通用语法:
public class Employee implements Comparator<Employee>
{
@Override
public int compare(Employee ob1, Employee ob2)
{
return ob1.id - ob2.id;
}
}
请务必使用@ Override
Annotation。如果你得到错误的方法(参数,返回值等),这将给你一个编译器警告
使用Comparable
时,您可以像这样使用它:
public class Employee implements Comparable<Employee>
{
@Override
public int compareTo(Employee e)
{
//your compare code
}
}