纠正它,以便它将编译并正确实现Comparable

时间:2014-06-07 02:49:34

标签: java comparable

为什么以下程序无法编译?纠正它,以便它编译并正确实现Comparable。

class Int implements Comparable
{
    private int x;
    public Int(int x)
    {
        this.x = x;
    }
    public int compareTo(Int other)
    {
        return x - other.x;
    }
}

---- ////我假设compareTo方法错了..但我不知道为什么或如何解决它。

3 个答案:

答案 0 :(得分:1)

The interface Comparable的定义类型参数为<T>

如果没有为需要它的类或接口提供泛型类型参数,则默认类型参数假定为Object

因此,实际上,您的类声明如下所示:

public class Int implements Comparable<Object>

现在,这就是事情变得有趣的地方。 compareTo(T other)将泛型类型参数作为其类型参数。如果您没有明确声明类型是某种东西,那么方法签名会显示为compareTo(Object other)

我只想说,ObjectInt不是同一个对象。当您尝试将方法声明为@Override时,编译器会通知您,您的方法不会继承或实现任何内容。

归根结底,这归结为:你必须修复你的类型参数。如果您想与Int进行比较,请明确声明:

public class Int implements Comparable<Int>

现在,您的代码将被编译。

答案 1 :(得分:0)

替换:

class Int implements Comparable

使用:

class Int implements Comparable<Int>

您需要指定要比较的内容。如果它是空白的,那么您需要比较compareTo()中的对象。

答案 2 :(得分:0)

试试这个

public class Int implements Comparable<Int> {
private int x;

public Int(int x) {
    this.x = x;
}

public int getX() {
    return x;
}

public void setX(int x) {
    this.x = x;
}

@Override
public int compareTo(Int other) {
    return x-other.getX();
}

}