1

我正在尝试实现comparable以使用Arrays.sort(array)但由于某种原因它没有compareTo在超类中找到该方法。我正在尝试比较字符串仅供参考。

编辑:对不起,我忘了添加我得到的错误。这里是:

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

4 回答 4

6

java.lang.Object,这是你的超类,没有实现Comparable. 您应该将班级的签名更改为:

public abstract class Employee implements Cloneable, Comparable<Employee>

然后实现这个方法:

public int compareTo(Employee other) {
    // logic to compare here
}

使用实际逻辑进行比较(也就是不要尝试依赖其他一些对象的实现)。

于 2013-04-07T18:54:41.140 回答
1

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

super.compareTo(...)结果总是会以这种方式失败,除非您扩展另一个提供实现的类。

于 2013-04-07T18:53:58.457 回答
0

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

于 2013-04-07T18:54:57.087 回答
0

问题是您正在尝试调用super.compareTo( Object object),但由于您的 Employee 类本身并没有扩展一个类,它将在 Object 中寻找 compareTo 方法,而 Object 没有该方法。您需要在 Employee 中实际实现 compareTo 功能。

于 2013-04-07T18:57:18.267 回答