我不明白为什么我的“Comparable”界面不起作用

时间:2013-04-07 18:50:22

标签: java

我正在尝试实现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());
}

4 个答案:

答案 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)

Comparableinterface,因此没有默认实现。您的类不会扩展任何其他class,这意味着它不会继承任何实现。

因此,

super.compareTo(...)将始终以这种方式失败,除非您扩展另一个提供实现的类。

答案 2 :(得分:0)

我认为你真的想要编写不同的比较器,每个比较一个你要比较的字段:名称等。

答案 3 :(得分:0)

问题是你试图调用super.compareTo( Object object)但是因为你的类Employee本身不扩展一个类,它将在Object中找到compareTo方法,而Object没有该方法。您需要在Employee中实际实现compareTo功能。