假设我有一组客户端。 每个客户端都在其中存储三个对象,例如 客户端[1]有一个CurrentAccount
,CreditCard
,DebitCard
类。Java:将对象存储在对象数组中
我该如何去创建一个这样的数据库? 假设CurrentAccount
有一个公共的方法“getAmount
” 将它的工作,如果我叫:
int num = Client[1].CurrentAccount.getAmount();
Im相当肯定不会。但是,你如何创建这个数据库?
假设我有一组客户端。 每个客户端都在其中存储三个对象,例如 客户端[1]有一个CurrentAccount
,CreditCard
,DebitCard
类。Java:将对象存储在对象数组中
我该如何去创建一个这样的数据库? 假设CurrentAccount
有一个公共的方法“getAmount
” 将它的工作,如果我叫:
int num = Client[1].CurrentAccount.getAmount();
Im相当肯定不会。但是,你如何创建这个数据库?
您将不得不创建一个客户端类,该类具有获取当前帐户,信用卡和借记卡的方法。然后,如果有客户称为客户端的数组,你可以做这样的事情:
int num = clients[1].getCurrentAccount().getAmount();
这是与此相同:
Client client = clients[1];
CurrentAccount account = client.getCurrentAccount();
int num = account.getAmount();
只是短。
我喜欢这个想法,你会如何编写Client类中的getCurrectAccount方法? – user1766889
这将是一个简单的方法。客户端对象将有字段来存储他们的账户,所以你所要做的就是'public getCurrentAccount(){return currentAccount; }' –
public class Client{
public CurrentAccount ca = new CurrentAccount();
public CreditCard cc = new CreditCard();
public DebitCard dc = new DebitCard();
}
public class CurrentAccount {
private int amount = 0;
public int getAmount(){ return amount; }
}
某处...
client<Client>[] = new Client<Client>[3]();
client[1] = new Client();client[2] = new Client();client[3] = new Client();
int amount = client[1].ca.getAmount();
编辑1 一个更好的做法是在定义客户端类的方法。
public class Client{
private CurrentAccount ca = new CurrentAccount(); // note that its private now.
public CreditCard cc = new CreditCard();
public DebitCard dc = new DebitCard();
// define a property acccess getter method
public int getCurrentAccountAmount(){return ca.getAmount();}
}
,并呼吁它是:
int amount = client[1].getCurrentAccountAmount();
不错。这是我想要做的。所以如果这样做的话一切都很好。 如果在你的代码中有三个不同的CurrentAccounts,名称为ca,那么会不会有问题?尽管名称相同,它们仍然是三个不同的实例吗? – user1766889
这样阅读。 1.st客户端举例说明一个新的CurrentAccount对象,该对象不同于也是新构建的2.nd客户端的CurrentAccount对象。 –
很抱歉,但我不喜欢这样的代码;)
您违反Law Of Demeter与此代码:
int num = clients[1].CurrentAccount.getAmount();
客户达到金额价值的事实感谢t必须隐藏CurrentAccount
。事实上,这会导致类实现和您的陈述之间的耦合增加。
您应该将Client
类中定义了一个名为getCurrentAmount()
方法:
public class Client{
private CurrentAccount currentAccount;
//supposing constructor setting currentAccount here
//and below here, the new method
public long getCurrentAmount(){
return currentAccount.getAmount();
}
}
现在你Client
类的实现将得到更好的封装:
int num = clients[1].getCurrentAmount();
我知道这可能是不好的形式,但它只是使它更复杂。 – user1766889
是什么让你认为它不会工作? –
这听起来像当你说数据库时,你只是在考虑使用数组,这可以很好地工作。我只需创建一个Client类,并为他们的'CurrentAccount','CreditCard'和'DebitCard'类添加getters/setters。然后像这样创建一个新的客户端类,'新的客户端[金额]'。 – Austin
我不知道。这似乎很奇怪。 假设我有20个客户端的数组,那么它是否意味着CurrentAccounts还会有20个不同的对象?尽管CurrentAccount不在其本身的数组中? – user1766889