1
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?但它不应该是对象吗?据我所知,comparable接口中compareTo的实现是空白的。

4

3 回答 3

2

执行此操作的规范方法如下:

public class Car implements Comparable<Car> {

    ...

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

请注意,您的实现compareTo()不能抛出任何已检查异常,因为Comparable<T>.compareTo()'sthrows规范不允许出现任何异常。

于 2013-03-23T20:15:07.617 回答
0

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

这就是您无法在代码中以可比较的方式实现 T 的原因,因为编译器将其视为一种不同的方法,而不是被覆盖的方法。但实际上问题在于覆盖。

于 2013-03-23T20:24:48.840 回答
0

第一:接口从不包含方法的实现。

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

示例:如果您实现这样的接口:

public class MyClass implements Comparable<MyClass>

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

public int compareTo(MyClass param)
于 2013-03-23T20:16:28.533 回答