0

私はJavaが初めてです。私はインターフェイスを学んでおり、次のことをしようとしています:

package comparator;
import java.io.*;
import java.util.*;

public class comparator {
    public static bankAccount ba=new bankAccount(80);
    public static void main(String args[]){
    method1(ba);
    }
    public static void method1(bankAccount ba1){
        bankAccount ba2=new bankAccount(80);
        int c=((Comparable) ba1).compareTo(ba2);
        System.out.println(c);
    }
}
class bankAccount{
    public double balance;
    public A(double bal){
        balance=bal;
    }
}

しかし、私は以下のようなエラーが発生しています:

Exception in thread "main" java.lang.ClassCastException: comparator.bankAccount cannot be cast to java.lang.Comparable
    at comparator.comparator.method1(comparator.java:25)
    at comparator.comparator.main(comparator.java:20)

この新しいタイプのエラーを理解できません。どんな助けでも本当に感謝しています。

4

7 に答える 7

3

bankAccountタイプのオブジェクトを にキャストすることはできませんComparableComparableクラスにインターフェイスを実装し、メソッドbankAccountをオーバーライドする必要がありますcompareTo()

public class bankAccount implements Comparable {
    @Override
    public int compareTo(Object o){
        // TODO Auto-generated method stub
        // Your logic goes here
        return 0;
    }
}
于 2013-11-07T04:17:43.367 に答える
2

クラス bankAccount はどこで定義しましたか? (補足: Java クラスでは通常、UpperCamelCase です。つまり、BankAccount である必要があります)。

bankAccount オブジェクトを Comparable にキャストするには、bankAccount クラスで Comparable インターフェイスを実装する必要があります。すなわち

public class BankAccount implements Comparable {
...
    public int compareTo(Object o) {
    ...
    }
}

Comparable を実装することにより、compareTo(Object o) メソッドも定義する必要があります。

于 2013-11-07T04:17:57.017 に答える
1

インターフェイスbankAccount classを実装する必要がありComparableます。

class bankAccount implements Comparable{
   public int compareTo(Object obj){
    .......
  }
}
于 2013-11-07T04:17:31.737 に答える
1

Comparable にキャストするには、Comparable を実装する必要があり、compareTo 関数が必要です。

クラス宣言を次のように変更します

public static class Comparator implements Comparable<Comparator> {

また、compareTo 関数を実装して、それらのうちの 2 つを比較する方法を知っていることを確認してください。

于 2013-11-07T04:18:34.777 に答える
1

必要なものを比較するには、オブジェクトにインターフェイスComparableを実装する必要があります。または、Comparatorを記述し、インスタンス化して呼び出し、比較する両方のオブジェクトを渡すことができます。または、オブジェクトの 2 つのフィールドを比較します。これらは、Stringすでに同等のものを実装しているようなタイプです。

于 2013-11-07T04:18:50.090 に答える
0

Compare メソッドを使用する実装を使用した次の例を検討してください。 プロパティの AccountNo と AccountName を使用して BankAccount Pojo を作成しました。

  public class BankAccount implements Comparable {
    int accoutnNo;
    String accountName;

    public String getAccountName() {
        return accountName;
    }
    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }
    public int getAccoutnNo() {
        return accoutnNo;
    }
    public void setAccoutnNo(int accoutnNo) {
        this.accoutnNo = accoutnNo;
    }
    public int compareTo(Object bAccount) {
        int thisAccount = ((BankAccount) bAccount).getAccoutnNo();
        //      ascending order
        return this.accoutnNo - thisAccount;
        //      descending order
        //return thisAccount -this.accoutnNo ;
    }
}

Main メソッドで Comparable を使用できるようになりました

于 2013-11-07T04:23:33.507 に答える
0

Comparable インターフェイスを実装しましたか

public class bankAccount implements Comparable {

bankAccount で compareTo メソッドを使用していますが、それが見つかりません。Comparable を実装します。コードは問題ないはずです。

于 2013-11-07T04:26:44.257 に答える