1

好的,我正在尝试从另一个文件中的另一个类中的另一个函数调用 setter 和 getter。这就是我得到的,我真的不知道我做错了什么......

银行.java

package Bank;

import java.io.*;
import java.util.*;

public class Bank
{
  public static void main (String args[]) throws FileNotFoundException
  {
     final String fileName = "Bank/AcctInfo.txt";
     File accounts = new File(fileName);

     ArrayList <Object> acctInfo = new ArrayList <Object> ();
        acctInfo = setObjects(accounts);
  }

  public static ArrayList setObjects(File document) throws FileNotFoundException
  {
     ArrayList <Object> objectArray = new ArrayList <Object> ();

     Scanner fileInput = new Scanner(document);

     String blankInfo;
     String accountType;
     String customerType;
     String customerName;

     int accountNumber;

     float balance;

        int counter = 0;    

     while (fileInput.hasNext())
     {

        accountNumber = fileInput.nextInt();
        blankInfo = fileInput.nextLine();

        accountType = fileInput.nextLine();

        customerName = fileInput.nextLine();

            customerType = fileInput.nextLine();

        balance = fileInput.nextFloat();
        blankInfo = fileInput.nextLine();

            objectArray.add(new BankAccount());

            objectArray.get(counter).setAccNumber(accountNumber);

            counter++;

     }

     return objectArray;
  }
}

银行账户.java

package Bank;

public class BankAccount extends Bank
{       
    private int accNumber;
    private String accType;
    private String cusName;
    private String cusType;
    private float bal;

    public void setAccNumber(int accountNumber)
    {
        int accNumber = accountNumber;
    }

    public int getAccNumber()
    {
        return accNumber;
    }

    public void setAccType(String accountType)
    {
        String accType = accountType;
    }

    public String getAccType()
    {
        return accType;
    }

    public void setCusName(String customerName)
    {
        String cusName = customerName;
    }

    public String getCusName()
    {
        return cusName;
    }

    public void setCusType(String customerType)
    {
        String cusType = customerType;
    }

    public String getCusType()
    {
        return cusType;
    }

    public void setBal(float balance)
    {
        float bal = balance;
    }

    public float getBal()
    {
        return bal;
    }
}

错误

Bank.java:51: error: cannot find symbol
            objectArray.get(counter).setAccNumber(accountNumber);
                                    ^
symbol:   method setAccNumber(int)
location: class Object
Note: .\Bank\Bank.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

它还没有完成,但如果有人能帮助我完成那一点,那将是一个巨大的帮助......

4

4 回答 4

3

而不是ArrayList<Object>,使用ArrayList<BankAccount>.

Object是一个没有带有签名的方法的类,setAccNumber(int)BankAccount有。

ArrayList<Object>声明说你要声明一个ArrayList里面有的Objects;由于所有类都继承自Object,因此将 的实例放入BankAccount列表中是有效的,但就编译器而言,当您引用列表中的元素时它是一个Object并且只有标准方法可用于Object.

您的类中还有其他特性(例如,在您的 setter 方法中,您声明一个新变量并分配给它,在将它分配给一个字段的内部)。如果可以的话,我会建议你重温你的课程讲义。有一个名为Java Precisely的在线免费 PDF ,它非常简洁地介绍了 Java——我认为免费版本最高可达 Java 5,但足以涵盖这里的主题。

于 2013-11-12T22:43:45.913 回答
1

Other answers correctly suggest using ArrayList<BankAccount>

If (for whatever strange reason) you cannot or do not want to do it, then you need to implicitly cast the retrieved list element to BankAccount type.

Your

 objectArray.get(counter).setAccNumber(accountNumber);

will become

  ((BankAccount)objectArray.get(counter)).setAccNumber(accountNumber);
于 2013-11-12T22:52:52.743 回答
1

因为你正在这样做:

ArrayList <Object> objectArray = new ArrayList <Object> ();

那里的清单不知道里面的东西是什么,因为你说它们是Object

如果你这样做

ArrayList <BankAccount> objectArray = new ArrayList <BankAccount> ();

它应该像你期望的那样工作。

于 2013-11-12T22:44:46.500 回答
1

如果你想在BankAccount你的项目上使用 的方法ArrayList,你必须指定它是一个 BankAccounts 列表。具体来说,这条线

ArrayList <Object> objectArray = new ArrayList <Object> ();

真的应该

ArrayList <BankAccount> objectArray = new ArrayList <BankAccount>();

您可以将泛型视为指定您拥有的列表。因此,对于第一个示例,您可以将其理解为“对象的 ArrayList”。由于您不知道它们是否是 BankAccounts,因此您不知道是否可以调用settAccNumber()它们。

对于第二个示例,您可以将其理解为“An ArrayList of BankAccounts”。在这种情况下,您知道它们是 BankAccounts,因此您知道可以调用setAccNumber()它们。

这是关于泛型的一课,因为您似乎不太了解它们。

这里也是关于它们的 oracle 文档。

于 2013-11-12T22:45:57.183 回答