2012-10-22 94 views
0

假设我有一组客户端。 每个客户端都在其中存储三个对象,例如 客户端[1]有一个CurrentAccount,CreditCard,DebitCard类。Java:将对象存储在对象数组中

我该如何去创建一个这样的数据库? 假设CurrentAccount有一个公共的方法“getAmount” 将它的工作,如果我叫:

int num = Client[1].CurrentAccount.getAmount(); 

Im相当肯定不会。但是,你如何创建这个数据库?

+1

是什么让你认为它不会工作? –

+2

这听起来像当你说数据库时,你只是在考虑使用数组,这可以很好地工作。我只需创建一个Client类,并为他们的'CurrentAccount','CreditCard'和'DebitCard'类添加getters/setters。然后像这样创建一个新的客户端类,'新的客户端[金额]'。 – Austin

+0

我不知道。这似乎很奇怪。 假设我有20个客户端的数组,那么它是否意味着CurrentAccounts还会有20个不同的对象?尽管CurrentAccount不在其本身的数组中? – user1766889

回答

0

您将不得不创建一个客户端类,该类具有获取当前帐户,信用卡和借记卡的方法。然后,如果有客户称为客户端的数组,你可以做这样的事情:

int num = clients[1].getCurrentAccount().getAmount(); 

这是与此相同:

Client client = clients[1]; 
CurrentAccount account = client.getCurrentAccount(); 
int num = account.getAmount(); 

只是短。

+0

我喜欢这个想法,你会如何编写Client类中的getCurrectAccount方法? – user1766889

+0

这将是一个简单的方法。客户端对象将有字段来存储他们的账户,所以你所要做的就是'public getCurrentAccount(){return currentAccount; }' –

0
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(); 
+0

不错。这是我想要做的。所以如果这样做的话一切都很好。 如果在你的代码中有三个不同的CurrentAccounts,名称为ca,那么会不会有问题?尽管名称相同,它们仍然是三个不同的实例吗? – user1766889

+0

这样阅读。 1.st客户端举例说明一个新的CurrentAccount对象,该对象不同于也是新构建的2.nd客户端的CurrentAccount对象。 –

0

很抱歉,但我不喜欢这样的代码;)

您违反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(); 
+0

我知道这可能是不好的形式,但它只是使它更复杂。 – user1766889