错误:Car中的compareTo(Object)无法在Comparable中实现compareTo(T)

时间:2013-03-23 20:13:36

标签: java interface compareto

public int compareTo(Object another) throws CustomMadeException
{
    if(this.getClass() != another.getClass() )
    {
        throw new CustomMadeException();
    }

    Car other = (Car) another;


    return this.getBrand().compareTo(other.getBrand());


}

我不明白我的代码到底有什么问题。为什么它不能在可比的情况下实现T?我是否必须将compareTo的参数更改为T?但它不应该是对象吗?据我所知,比较界面中compareTo的实现是空白的。

3 个答案:

答案 0 :(得分:2)

这样做的规范方法如下:

public class Car implements Comparable<Car> {

    ...

    public int compareTo(Car other)
    {
        return this.getBrand().compareTo(other.getBrand());
    }
}

请注意,compareTo()的实现不能抛出任何已检查的异常,因为Comparable<T>.compareTo()的{​​{1}}规范都不允许这样做。

答案 1 :(得分:0)

首先:接口永远不包含方法的实现。

第二:你的类的implements语句看起来如何?如果使用泛型类型,则必须在方法中将该类型用作参数类型。

实施例: 如果你实现这样的界面:

public class MyClass implements Comparable<MyClass>

那么你的方法必须有以下签名:

public int compareTo(MyClass param)

答案 2 :(得分:0)

要从Comparable接口覆盖compareTo()方法,您不能抛出新的或更广泛的已检查异常。因此,你错了。这违反了重写java中任何方法的规则。请参阅此链接以了解java中覆盖的规则:Sample link

这就是为什么你无法在代码中实现T的原因,因为编译器将它视为一种不同的方法而不是被覆盖的方法。但实际上问题在于压倒一切。