在Java中实现Comparable

时间:2014-11-15 17:28:12

标签: java compare

所以我试图使用Comparable比较两个形状区域。我在课堂上实现它,我现在试图在我的LineSegment类中覆盖比较,该类扩展了我自己的抽象类Shape。

class LineSegment extends Shape implements Comparable{

public int compareTo(Object object1, Object object2)
      {
         LineSegment ls1 = (LineSegment) object1;
    LineSegment ls2 = this;
    return Double.compare(ls1.getArea(), ls2.getArea());
}



}

在我遇到比较两个双打的问题之前,我在这里看到了问题的解决方案,返回语句和Double。 getArea()返回LineSegment的双精度区域。所以我遇到了这个错误,任何帮助都将不胜感激,谢谢 - LineSegment is not abstract and does not override abstract method compareTo(java.lang.Object) in java.lang.Comparable class LineSegment extends Shape implements Comparable

3 个答案:

答案 0 :(得分:1)

要实施Comparable,您需要实施compareTo方法。

如果您想使用Comparator,则应实施compare

查看更多here

使用:

class LineSegment extends Shape implements Comparable<LineSegment>{
...

    @Override
    public int compareTo(LineSegment other) {
        return Double.compare(this.getArea(), other.getArea());
    }

}

答案 1 :(得分:1)

您需要使用Comparator接口而不是Comparable。所以你的班级定义将改为:

class LineSegment extends Shape implements Comparator <LineSegment> {
....//with compare(LineSegment ls1, LineSegment ls2) and you dont need typecasting

或者如果您打算进行比较,那么您需要实现:

class LineSegment extends Shape implements Comparable<LineSegment>{
    public int getArea() {...}

    public int compareTo(LineSegment object1)
    {

        return Double.compare(this.getArea(), object1.getArea());
    }
}

答案 2 :(得分:0)

使用Comparable,您必须将一个对象与此对象进行比较:

public int compareTo(Object object1){
    LineSegment ls1 = (LineSegment) object1;
    LineSegment ls2 = this;
    return Double.compare(ls1.getArea(), ls2.getArea());
}

这只是重写,但你应该使用<LineSegment>

class LineSegment extends Shape implements Comparable<LineSegment>{
    public int compareTo(LineSegment ls){
        return Double.compare(ls.getArea(),this.getArea());
    }
}