可比的界面排序方法不起作用

时间:2013-10-29 00:12:11

标签: java interface

我尝试在BankAccounts的数组列表上实现类似的接口,但是当我尝试编译并运行测试器类的main方法时,我遇到了重大错误,特别是关于Collection.sort(list)行。它说它无法识别语法..在线查看并通过javadoc找不到我错的地方..

public class BankAccount implements Comparable { //QUESTION 2.1
  /**
  A bank account has a balance that can be changed by 
  deposits and withdrawals.
 */
  private int accountNumber;
   private double balance; 
  /**
  Constructs a bank account with a zero balance
  @param anAccountNumber the account number for this account
  */
  public BankAccount(int anAccountNumber)
  {   
  accountNumber = anAccountNumber;
  balance = 0;
  }

   /**
  Constructs a bank account with a given balance
  @param anAccountNumber the account number for this account
  @param initialBalance the initial balance

* /       public BankAccount(int anAccountNumber,double initialBalance)       {
        accountNumber = anAccountNumber;         balance = initialBalance;       }

  /**
  Gets the account number of this bank account.
  @return the account number
  */
  public int getAccountNumber()
  {   
   return accountNumber;
   } 

  /**
  Deposits money into the bank account.
  @param amount the amount to deposit
  */
  public void deposit(double amount)
  {  
   double newBalance = balance + amount;
   balance = newBalance;
  }

  /**
  Withdraws money from the bank account.
  @param amount the amount to withdraw
  */
   public void withdraw(double amount)
   {   
     double newBalance = balance - amount;
     balance = newBalance;
   }

  /**
   Gets the current balance of the bank account.
   @return the current balance
  */
   public double getBalance()
   {   
     return balance;
   }


   public int compareTo (BankAccount temp) {


     if (balance<temp.balance) 
         return -1;
     if (balance==temp.balance) 
         return 0;
     return 1;
  }

}

 public class TestSortedBankAccounts {

    public static void main(String[] args) {
        // Put bank accounts into a list 
        ArrayList<BankAccount> list = new ArrayList<BankAccount>();

        BankAccount ba1 = new BankAccount(100, 500); //Constructor acctNumber and balance
        BankAccount ba2 = new BankAccount(200, 10000);
        BankAccount ba3 = new BankAccount(300, 400);
        BankAccount ba4 = new BankAccount(600, 0);
        BankAccount ba5 = new BankAccount(800, 50);

        list.add(ba1);
        list.add(ba2);
        list.add(ba3);
        list.add(ba4);
        list.add(ba5);

        // Call the library sort method
        Collections.sort(list);

        // Print out the sorted list 
        for (int i = 0; i < list.size(); i++) {
            BankAccount b = list.get(i);
            System.out.println(b.getBalance());
        }
    }
}

更新:TestSortedBankAccounts.java:26:错误:找不到合适的排序方法(ArrayList)       Collections.sort(名单);                  ^     方法Collections.sort(List,Comparator)不适用       (无法从参数实例化,因为实际和形式参数列表的长度不同)     方法Collections.sort(List)不适用       (推断类型不符合声明的界限)         推断:BankAccount         bound(s):可比较)   其中T#1,T#2是类型变量:     T#1扩展了在方法排序中声明的Object(List,Comparator)     T#2扩展了方法排序(List)中声明的Comparable 1错误

2 个答案:

答案 0 :(得分:4)

您正在实施Comparable的原始版本。您应该实现Comparable的通用形式:

public class BankAccount implements Comparable<BankAccount> {

如果您实施原始表单,则compareTo上的参数类型将为Object。使用通用表单,您可以将泛型类型参数作为参数提供给compareTo,如您所知。

答案 1 :(得分:0)

我的回答(我已尝试并且有效):

public class BankAccount implements Comparable<Object> { // <-- 
  /**
  A bank account has a balance that can be changed by 
  deposits and withdrawals.
 */
  private int accountNumber;
   private double balance; 
  /**
  Constructs a bank account with a zero balance
  @param anAccountNumber the account number for this account
  */
  public BankAccount(int anAccountNumber)
  {   
  accountNumber = anAccountNumber;
  balance = 0;
  }

   /**
  Constructs a bank account with a given balance
  @param anAccountNumber the account number for this account
  @param initialBalance the initial balance
  */ 
  public BankAccount(int anAccountNumber, double initialBalance) {
      accountNumber = anAccountNumber; balance = initialBalance; }

  /**
  Gets the account number of this bank account.
  @return the account number
  */
  public int getAccountNumber()
  {   
   return accountNumber;
   } 

  /**
  Deposits money into the bank account.
  @param amount the amount to deposit
  */
  public void deposit(double amount)
  {  
   double newBalance = balance + amount;
   balance = newBalance;
  }

  /**
  Withdraws money from the bank account.
  @param amount the amount to withdraw
  */
   public void withdraw(double amount)
   {   
     double newBalance = balance - amount;
     balance = newBalance;
   }

  /**
   Gets the current balance of the bank account.
   @return the current balance
  */
   public double getBalance()
   {   
     return balance;
   }


   // public int compareTo (BankAccount temp) { // <-- WRONG
   public int compareTo(Object temp){ // <-- RIGHT

     BankAccount other = (BankAccount)temp; // <-- Cast to BankAccount
     if (balance<other.balance) 
         return -1;
     if (balance==other.balance) 
         return 0;
     return 1;
  }

}