0

I'm new to java. I'm learning Interfaces and I'm trying to do the following:

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;
    }
}

But I'm getting an error as below:

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)

I'm unable to understand this new type of error. Any help would be really appreciated.

4

7 回答 7

3

您根本无法将bankAccount类型的对象强制转换为Comparable. 您需要Comparable在您的类中实现接口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 接口。IE

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 函数,以便它知道如何比较其中两个!

于 2013-11-07T04:18:34.777 回答
1

要么你需要在你的对象上实现接口Comparable来比较你想要的;或者你可以编写一个Comparator,实例化并调用它,传递你想要比较的两个对象。或者比较对象的两个字段,它们是某种类型,例如String已经实现了可比性。

于 2013-11-07T04:18:50.090 回答
0

考虑以下示例和使用比较方法的实现我已经创建了一个具有属性 AccountNo 和 AccountName 的 BankAccount Pojo,它可以是您的任何属性.. 在我的情况下 accountNo 也是唯一的。

  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 回答