那麼,我被告知必須創建一個接受貨幣和價值的貨幣類。值應該存儲爲2個整數,一個表示美元值,另一個表示美分。限制輸入到構造函數,同時保持構造函數代碼最小
* 它應該接受精確到小數點後兩位的小數值。 *
所以我想我必須限制美分值,以便它應該只接受1到2位整數。現在,我的問題是,我的導師告訴我,在構造函數中做其他事情是不好的做法。我應該如何限制輸入,然後,如果我不能比其他的構造做任何事情:
public class Money {
Currency currency;
int dollar;
int cents;
public Money(Currency currency, int dollar, int cents) {
super();
this.currency = currency;
this.dollar = dollar;
this.cents = cents;
}
..... other code.....
}
上我應該如何實現什麼指示我的任何其他的想法?爲什麼它是不好的做法,有沒有一種方法來定義約束而不會犯這種不好的做法???
您不應該將美元和美分分開。只需跟蹤美分數量,然後除以100.使用'BigInteger',而不是'int'。 此外,在其他貨幣中,這些值不被稱爲美元和美分。 請參閱http://martinfowler.com/eaaDev/quantity.html –
@황현정:使用32位整數(有符號或不是)代表金錢幾乎總是代碼味道。在那裏有很多錯誤的應用程序,那裏的錯誤是或多或少的「工作」,但是應該發生高通脹(它已經發生在很多國家,它可能會再次發生),所有這些應用程序會中斷。使用64位基元(有符號或無符號)或* BigInteger *。 – TacticalCoder
但BigInteger消耗太多的內存,尤其是在循環和內容中使用時,正如我已閱讀Effective Java中的內容,此外,在我的導師交給我的規範中,所以我必須遵循指示或註定!哈哈..我在想的只是將美元兌換成美分和美分,而不是使用大整數。 :D –