为什么以下程序无法编译?纠正它,以便它编译并正确实现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方法错了..但我不知道为什么或如何解决它。
答案 0 :(得分:1)
The interface Comparable
的定义类型参数为<T>
。
如果没有为需要它的类或接口提供泛型类型参数,则默认类型参数假定为Object
。
因此,实际上,您的类声明如下所示:
public class Int implements Comparable<Object>
现在,这就是事情变得有趣的地方。 compareTo(T other)
将泛型类型参数作为其类型参数。如果您没有明确声明类型是某种东西,那么方法签名会显示为compareTo(Object other)
。
我只想说,Object
和Int
不是同一个对象。当您尝试将方法声明为@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();
}
}