我绝对不知道如何在这里实现我想要的东西。因此,我希望我创建的每个客户都有自己的帐号列表,但我似乎没有让它正常工作,因为看起来每个客户都没有一个独特的" accountList" 。任何提示或指示?提前谢谢!
List<Customer> customerList = new ArrayList<Customer>();
case 1:
// creates a new customer, adds customer to arraylist
System.out.println("Type name:");
String firstname = input.next();
System.out.println("Type surname:");
String surname = input.next();
System.out.println("Type your social security number:");
ssn = input.next();
System.out.println("Input account number: ");
String accNo = input.next();
Account account = new Account(accNo);
Customer newCustomer = new Customer(firstname,
surname, ssn, account);
customerList.add(newCustomer);
public class Customer {
public List<Account> accountList;
private String firstname, surname, ssn;
Account account;
public Customer(String firstname, String surname, String ssn, Account account) {
this.firstname = firstname;
this.surname = surname;
this.ssn = ssn;
this.account = account;
this.accountList = new ArrayList<Account>();
}
// set and get methods here (not relevant I think)
public void addAccount(Account account) {
this.accountList.add(account);
}
public class Account {
private String accountNo;
public Account(String accountNo) {
this.accountNo = accountNo;
}
public void setAccountNo(String accountNo) {
this.accountNo = accountNo;
}
public String getAccountNo() {
return accountNo;
}
}
答案 0 :(得分:0)
您的客户已拥有自己的帐户列表。 由于'accountList'被定义为对象 - 实例变量,因此创建的每个Customer都将拥有自己独立的帐户列表。
如果您添加'static'关键字并将其设为类变量,则所有客户都只会共享此列表(例如,无论您创建的客户数量是多少,只有这一个列表。)
但我建议您进行两项更改:
1。)从Customer中删除Account变量。由于您有一个包含所有这些帐户的列表,我没有看到任何一个帐户附加到该客户(除非它是某种主要帐户或类似的,但在这种情况下,它将与列表中的那些不同它的类型)。
2.。)仍然可以从您的客户ID中处理帐户更改构造函数,如下所示:
public Customer(String firstname, String surname, String ssn, Account account) {
this.firstname = firstname;
this.surname = surname;
this.ssn = ssn;
this.accountList = new ArrayList<Account>();
//directly add the first account to the list of accounts
if(account != null){
accountList.add(account);
}
3。)(可选)上面的构造函数不满意。如果有人在创建客户时准备好帐户对象,那么调用者(最终是你;)的可能性很高)有一大堆帐户要添加到此客户,因此ID更改我的构造函数是这样的:
public Customer(String firstname, String surname, String ssn, List<Account> accounts) {
this.firstname = firstname;
this.surname = surname;
this.ssn = ssn;
this.accountList = new ArrayList<Account>();
//directly add the first account
if(accounts != null){
this.accountList = accounts;
}
}
如果呼叫者拥有该客户的帐户列表,他可以直接交付创建对象的整个列表。另一方面,如果他还没有准备任何账户,他将只提供空值,并且您已准备好空列表。
如果没有账号准备就绪,如果你不喜欢上面的“null”,那么“varargs”(变量参数)也有可能提出某种类型的0-n参数:
public Customer(String firstname, String surname, String ssn,
Account... accounts) {
this.firstname = firstname;
this.surname = surname;
this.ssn = ssn;
this.accountList = new ArrayList<Account>();
// If any accounts delivered, add them to the list
for (Account tempAccount : accounts) {
if (tempAccount != null) {
accountList.add(tempAccount);
}
}
}
在此示例中,您可以像这样使用它:
public static void main(String[] args){
// Case "I dont have a Account yet, just make me a Customer!
Customer myCustomer = new Customer("Foo", "Bar", "bla");
// Case "I already have a Account, letme directly add that to the Customer that i want to create now"
Account a = new Account();
Customer myCustomer2 = new Customer("Foo", "Bar", "bla", a);
// Case "I already have a list of Accounts, letme directly add that to ..."
Account b = new Account();
Account c = new Account();
List<Account> accounts = new ArrayList<Account>();
accounts.add(b);
accounts.add(c);
Customer myCustomer3 = new Customer("Foo", "Bar", "bla", accounts.toArray(new Account[0]));
}
抱歉,在我注意到你需要一个对象数组而不是一个列表之前,我开始写关于varargs的文章。这就是为什么我们将“toArray” - 方法作为一种解决方法,使我们的帐户列表成为一个帐户数组。但是如果不明确的话,请不要犹豫,忽略关于varargs的部分,并选择构造函数获取一个帐户列表(或null)。
我认为你正在学习Java,如果是这样的话:到目前为止,你做得很好。不要被所有的信息搞糊涂,继续。我建议您阅读有关对象实例变量和类变量的内容,以阐明哪些对象共享,哪些不共享。多年来,“更好”的设计将随之而来,不用担心这样的“设计问题”并与他们一起玩,因为他们会教你“艰难的道路”。