从另一个类和.java文件调用Set / Get方法

时间:2013-11-12 22:41:06

标签: java

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

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

BankAccount.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 个答案:

答案 0 :(得分:3)

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

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

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

您的课程中还有其他特点(例如,在您的setter方法中,您声明一个新变量并分配给它,在将其分配给一个字段内)。如果可以的话,我建议您重新阅读课程讲义。有一个名为Java Precisely的在线免费PDF,它是一个非常简洁的Java版本 - 我认为免费版本是Java 5,但这足以涵盖这里的主题。

答案 1 :(得分:1)

因为你这样做:

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

列表中不知道里面的内容是什么,因为你说它们是Object

如果你做到了

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

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

答案 2 :(得分:1)

如果要对BankAccount的项目使用ArrayList的方法,则必须指定它是BankAccounts的列表。特别是,行

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

应该是

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

您可以将泛型视为指定列表中的内容。因此,对于第一个示例,您可以将其读作“对象的ArrayList”。由于您不知道它们是否为BankAccounts,因此您不知道是否可以在其上调用settAccNumber()

对于第二个示例,您可以将其读作“BankAccounts的ArrayList”。在这种情况下,您知道他们是BankAccounts,因此您知道可以在其上调用setAccNumber()

Here's关于泛型的一课,因为你似乎没有完全掌握它们。

Here's关于它们的oracle文档。

答案 3 :(得分:1)

其他答案正确建议使用ArrayList<BankAccount>

如果(出于任何奇怪的原因)您不能或不想这样做,那么您需要隐式cast将检索到的列表元素BankAccount类型。

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

将成为

  ((BankAccount)objectArray.get(counter)).setAccNumber(accountNumber);
相关问题