2013-03-23 40 views
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?但是它不应该是Object吗?据我所知,compareTo在界面上的实现可比较是空白的。错误:在汽车compareTo(对象)无法实现比较(T)在比较

回答

2

的规范办法做到这一点如下:

public class Car implements Comparable<Car> { 

    ... 

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

请注意,您的compareTo()实现不能抛出任何checked异常,因为没有通过Comparable<T>.compareTo()throws规范允许的。

+0

好的,但不应该是Object吗?它是equals()的对象吧? – user2089523 2013-03-23 20:20:39

+0

错误:汽车不是抽象的,并且不会覆盖比较中的抽象方法compareTo(Object) – user2089523 2013-03-23 20:21:31

+0

@ user2089523:您是否按照我的答案执行“Comparable ”? – NPE 2013-03-23 20:22:26

0

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

第二:你的类的implements语句是怎么样的?如果您使用泛型类型,则必须将该类型用作方法中的参数类型。

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

public class MyClass implements Comparable<MyClass> 

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

public int compareTo(MyClass param) 
0

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

这就是为什么您无法在代码中实现类似T的原因,因为编译器会将它视为不同的方法而不是覆盖的方法。但实际上问题在于重写。