2012-12-06 106 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,而不是將人員鏈接到錢包的地圖。正確的選擇將取決於您的整體應用程序目標。將地圖用於查找目的可能更有效,但將錢包存儲在人員內可能更合乎邏輯,特別是如果錢包不能由兩個人同時擁有。