我正在尝试实现comparable
以便使用Arrays.sort(array)
但由于某种原因它没有在超类中找到compareTo
方法。我想比较字符串FYI。
编辑:抱歉,我忘了添加我收到的错误。这是:
Employee.java:32: error: cannot find symbol
return super.compareTo((Object)other);
^
symbol: method compareTo(Object)
代码:
public abstract class Employee implements Cloneable, Comparable
{
private Name name;
private double weeklyPay;
public Employee(String first, String middle, String last, double weeklyPay)
{
this.weeklyPay = weeklyPay;
name = new Name(first,middle,last);
}
public Employee(String last, double weeklyPay)
{
this.name = name;
this.weeklyPay = weeklyPay;
name = new Name(last);
}
public Employee(String first, String last, double weeklyPay)
{
this.name = name;
this.weeklyPay = weeklyPay;
name = new Name(first,last);
}
public abstract double getWeeklyPay();
public String getFullName()
{
return name.getFullName();
}
public int compareTo(Object other)
{
return super.compareTo((Object)other);
}
public int compareTo(Name name)
{
return compareTo((Object)name.getFullName());
}
答案 0 :(得分:6)
java.lang.Object
,这是您的超类,不会实现Comparable
。您应该将班级的签名更改为:
public abstract class Employee implements Cloneable, Comparable<Employee>
然后实现此方法:
public int compareTo(Employee other) {
// logic to compare here
}
使用实际逻辑进行比较(也就是说,不要尝试依赖于其他一些对象实现)。
答案 1 :(得分:1)
Comparable
是interface
,因此没有默认实现。您的类不会扩展任何其他class
,这意味着它不会继承任何实现。
super.compareTo(...)
将始终以这种方式失败,除非您扩展另一个提供实现的类。
答案 2 :(得分:0)
我认为你真的想要编写不同的比较器,每个比较一个你要比较的字段:名称等。
答案 3 :(得分:0)
问题是你试图调用super.compareTo( Object object)
但是因为你的类Employee本身不扩展一个类,它将在Object中找到compareTo方法,而Object没有该方法。您需要在Employee中实际实现compareTo功能。