2011-11-28 143 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'只会影响编译器检查某个方法是否实际覆盖超类中的某个方法或实现一个接口方法。它没有任何其他功能结果。该注释的整个意图恰恰赶上了你遇到的那种错误。 –