用户输入的Java对象名称作为方法调用

时间:2012-12-06 12:27:46

标签: java object

创建了一个Wallet课程,您可以在其中创建成员并在他们之间转移资金。然后,用户可以选择谁给钱以及谁收到钱。以下是一些相关代码:

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);

所以我希望用户例如在扫描仪中输入“adam”,然后以某种方式将“sWallet”附加到adam,然后将其用作方法调用的对象名称。

我该怎么做?或者有更好的方法吗?

4 个答案:

答案 0 :(得分: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 :(得分:2)

您可以使用地图。

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

但是,在这种情况下,如果可能,我建议删除Wallet构造函数的“Adam”参数。 让钱包本身独立于拥有它的人。

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

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.

答案 2 :(得分:1)

由于钱包的所有者是您系统中的实体,我个人会给他们自己的课程。这允许更复杂的安排,例如一个人拥有多个钱包,或存储关于所有者的其他元数据。

那么你的例子就是:

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));

如果您在.equals()课程中定义了合理的Person方法,则可以再次找到该钱包:

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

我还会考虑Person类是否可能包含Wallet,而不是将人物与钱包联系起来。正确的选择取决于您的整体应用目标。为查找目的设置地图可能更有效,但将钱包存储在人员中可能更合乎逻辑,尤其是如果钱包不能同时由两个人拥有。

答案 3 :(得分:0)

您可以创建哈希映射

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

然后

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

会返回相应的对象