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的实现是空白的。
答案 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的原因,因为编译器将它视为一种不同的方法而不是被覆盖的方法。但实际上问题在于压倒一切。