2013-03-23 33 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的原因,因爲編譯器會將它視爲不同的方法而不是覆蓋的方法。但實際上問題在於重寫。