2011-11-28 27 views
1

私はBankAccountクラスを作成しています。このクラスでは、たくさんの銀行口座を配列リストに入れ、アカウント番号に従ってソートします。次のように私はcompareTo()方法を書いた:私の主な方法、accounts@ 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; 

は、配列リストのための変数です。 Collections.sort(accounts);をしようとするとできません。 "実引数と仮引数の長さが異なるため、推論された型が宣言された境界に適合しないため、引数からインスタンス化できません"というエラーが表示されます。これは私がcompareTo()メソッドをオーバーライドしていないためだと思ったが、@Override itを試してみると、「メソッドはスーパータイプからメソッドをオーバーライドしたり実装していない」と言われています。私は問題が何であるか理解していない。どんな助けもありがとう。

+2

があなたの 'BankAccount'クラス*は、それが' Comparableを '実装することを宣言*していますか? –

答えて

9

BankAccountクラスはjava.lang.Comparable<BankAccount>インターフェイスを実装する必要がありますが、これはコードには当てはまりません。実際にはCollection.sortは、Comparable<T>のコレクションを引数として取ります。

+0

そして、Comparable を実装する必要があります。 – user949300

+0

@ user949300私はあなたがあなたのコメントを提出する前にそれを認識し、編集しました:) – Romain

+0

ありがとう。これは救命救助者でした。 –

1

あなたのクラスはComparableインターフェイスを実装していますか?

public class BankAccount implements Comparable<BankAccount> 
3

あなたのクラス宣言はこのようになっていることを確認してくださいクラスがcompareToメソッドをオーバーライドして、Comparableインターフェイスを実装する必要があります。 compareToは、デフォルトではjava.lang.Objectの一部ではありません。

+0

ありがとうございます。 –

3

ために:はいあなたはそれではなく、他のいくつかのパッケージからのデフォルト(java.lang.Comparableと)であることを確認するために、インポートを確認することができた場合

3

あなたのクラスにComparableを実装するのを忘れてしまったような音がします。確認してくださいクラス宣言は次のようになります。

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

+0

ありがとうございます。これは本当に役に立ちました。 –

+1

@DylanBroussard @DylanBroussard関連の注記では、 '@ Override'を使用するだけで、メソッドがスーパークラスから何かを実際にオーバーライドするのか、インタフェースメソッドを実装するのかをコンパイラがチェックするという効果があります。その他の機能的な結果はありません。そのアノテーションの意図全体が、あなたが遭遇したエラーの種類を正確に捉えています。 –

関連する問題