好吧,我正在尝试从另一个类中的另一个函数调用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
它还没有完成,但如果有人可以帮助我完成这一点,那将是一个巨大的帮助......
答案 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);