2011-11-28 137 views
1

我正在編寫一個BankAccount類,它將一堆銀行帳戶放入數組列表中,並根據其帳號對它們進行排序。我寫的compareTo()方法如下:無法@覆蓋Java中的compareTo()方法

public int compareTo(BankAccount another){ 
    if (Integer.parseInt(this.getAccountNumber()) > Integer.parseInt(another.getAccountNumber())) 
     return 1; 
    else if(Integer.parseInt(this.getAccountNumber()) < Integer.parseInt(another.getAccountNumber())) 
     return -1; 
    else 
     return 0; 

在我的主要方法,accounts是數組列表中的變量。當我試圖做Collections.sort(accounts);它是無法做到這一點。它給了我一個錯誤,說「不能從參數實例化,因爲實際和形式參數長度不同」和「推斷類型不符合聲明邊界」。我認爲這是因爲我沒有重寫compareTo()方法,但是當我嘗試@Override it時,它說「方法不會覆蓋或實現超類型的方法」。我不明白問題是什麼。任何幫助,將不勝感激。

+2

貴'BankAccount'類* *聲明它實現可比''? –

回答

9

你的BankAccount類應該實現java.lang.Comparable<BankAccount>接口,看起來這不是你的代碼中的情況。確實,Collection.sort正在收集Comparable<T>作爲論點。

+0

它必須實現Comparable ,而不僅僅是Comparable。 – user949300

+0

@ user949300在您提交評論之前,我已經意識到並編輯了:) – Romain

+0

謝謝。這是一個救星。 –

1

您的類是否實現了Comparable接口?如果是的話,你可以檢查導入,以確保它是不是從別的包默認(java.lang.Comparable的)

3

確保您的類聲明如下:

public class BankAccount implements Comparable<BankAccount> 
+0

非常感謝。 –

3

爲了覆蓋compareTo方法你的班級必須實現Comparable接口。默認情況下,compareTo不是java.lang.Object的一部分。

3

聽起來像你忘了讓你的班級實現Comparable。確保你的類聲明如下所示:

... class BankAccount ... implements Comparable<BankAccount>

+0

謝謝。這真的很有幫助。 –

+1

@DylanBroussard在相關說明中,使用'@ Override'只會影響編譯器檢查某個方法是否實際覆蓋超類中的某個方法或實現一個接口方法。它沒有任何其他功能結果。該註釋的整個意圖恰恰趕上了你遇到的那種錯誤。 –