为什么我收到有关compareTo方法的错误?

时间:2014-07-20 19:54:50

标签: java interface compareto

我想了解compareTo方法。我写了这个类AboutcompareTo,但我陷入了为什么/如何得到这个错误? - 代码差不多完成了。 任何人都可以详细解释我做错了什么。感谢

代码:

public class AboutCompareTo {

    public static void main(String[] args) {
        Fruit[] fruits = { new Fruit(2), new Fruit(3), new Fruit(1) };
        java.util.Arrays.sort(fruits);
    }

}

class Fruit implements Comparable<Fruit> {
    private double weight;

    public Fruit(double weight) {
        this.weight = weight;
    }

    @Override
    public int compareTo(Fruit o) {
        Fruit f = (Fruit) o;
        if (Fruit > o.Fruit)  // <-- the error
            return 1;
        else if ((Fruit < o.Fruit))  // <-- the error
            return -1;
        else
            return 0;

    }

} 

1 个答案:

答案 0 :(得分:4)

compareTo方法将您的类的实例(即此Fruit)与作为参数传递给您的另一个Fruit的实例进行比较。因此,比较需要在o重量和您自己的体重之间:

@Override
public int compareTo(Fruit o) {
    if (this.weight > o.weight)
        return 1;
    else if (this.weight < o.weight)
        return -1;
    else
        return 0;
}

注1:我使用this.weight来引用此Fruit的权重。我这样做是为了指出weight属性属于这个实例;但是,您可以从表达式中省略this.,即改为使用weight > o.weight

注2:我认为你是为了学习而做的。对于生产代码,Java类库提供了一种预先构建的方法,用于比较double s - 即Double.compare。您可以在一行中重写该方法:

@Override
public int compareTo(Fruit o) {
    return Double.compare(weight, o.weight);
}