2012-12-06 69 views
1

被赋予创建电子钱包类的任务,您可以在其中创建成员并在其间传输资金。然后用户可以选择谁给钱,谁接收。这里是一个小的相关代码:来自用户输入的Java对象名称方法调用

Wallet adamsWallet = new Wallet("Adam", 403.50); 
Wallet bentsWallet = new Wallet("Bent", 873); 
Wallet clarksWallet = new Wallet("Clark", 319.50); 


object_name_here.transfer(other_object_name_here, 200); 

所以我想,例如,用户在扫描仪进入“亚当”,然后以某种方式追加“sWallet”亚当,然后使用该作为对象名称方法调用。

我该怎么做,还是有更好的方法呢?

回答

7

使用Map存储钱包。例如:

Map<String, Wallet> wallets = new HashMap<>(); 

wallets.put("Adam", new Wallet("Adam", 403.50)); 
wallets.put("Bent", new Wallet("Bent", 873)); 
wallets.put("Clark", new Wallet("Clark", 319.50)); 

您可以通过地图名称查找钱包。

Wallet wallet1 = wallets.get("Adam"); 
Wallet wallet2 = wallets.get("Clark"); 

wallet1.transfer(wallet2, 200); 

请注意,对象没有名称 - 变量有名称。一个对象不是一个变量;一个变量是对一个对象的引用。你可以有多个引用同一个对象的变量。

+1

'new HashMap <>();'假设正在使用Java 7。对于旧版本的Java,使用'new HashMap ();' –

+0

感谢您的回答Jesper,这非常有帮助并且易于理解。 :) – Duane

2

您可以使用地图。

Map<String, Wallet> wallets = new HashMap<String, Wallet>(); 
wallets.put("Adam", new Wallet("Adam", 403.50)); 

然而,在这种情况下,我建议消除对电子钱包的构造函数如果有可能的“亚当”参数。 让钱包本身独立于谁拥有它。

然后你就可以得到一个人的钱包这样的:

String name = "Adam"; // this string could be read from your Scanner object. 
Wallet wallet = wallets.get(name); // You can also use wallets.get("Adam") directly of course. 
0

您可以创建一个哈希表

HashMap<String,Wallet> hm=new HashMap<String,Wallet>(); 
hm.put("adams",adamsWallet); 
... 

然后

Wallet temp=hm.get("adams"); 

将返回您相应的对象

1

由于钱包的主人是一个实体在系统中,我d亲自给他们自己的班级。这允许更复杂的安排,例如多个钱包由一个人拥有,或者存储关于所有者的额外元数据。然后

你的例子是:

Map<Person, Wallet> wallets = new HashMap<Person, Wallet>(); 

wallets.put(new Person("Adam"), new Wallet(403.50)); 
wallets.put(new Person("Bent"), new Wallet(873)); 
wallets.put(new Person("Clark"), new Wallet(319.50)); 

只要你有你的Person类中定义一个明智的.equals()方法,你可以再次找到了钱包:

Wallet wallet = wallets.get(new Person("Adam")); 

我也会考虑是否Person类可能包含Wallet,而不是将人员链接到钱包的地图。正确的选择将取决于您的整体应用程序目标。将地图用于查找目的可能更有效,但将钱包存储在人员内可能更合乎逻辑,特别是如果钱包不能由两个人同时拥有。