2015-05-10 49 views
4

所以我有下面的類..枚舉或int表示支付頻率

public abstract class Insurance { 
    private int yearlyPremium; 
    ... 
} 

,我想表示一個有多久支付保險領域,無論是通過枚舉或INT。

這裏是我的枚舉的想法:

public enum PaymentFrequency { 
    MONTHLY("Monthly", 12), 
    QUARTERLY("Quarterly", 4), 
    SEMIANNUALLY("Semiannually", 2), 
    ANNUALLY("Annually", 1); 

    private String name; 
    private int paymentsPerYear; 

    PaymentFrequency(String name, int paymentsPerYear) { 
     this.name = name; 
     this.paymentsPerYear = paymentsPerYear; 
    } 

    public String getName() { 
     return name; 
    } 

    public int getPaymentsPerYear() { 
     return paymentsPerYear; 
    } 
} 

一個額外的優勢,以枚舉的是,我可以用它values(靜態)和getName方法來產生下拉菜單爲用戶界面,因此,如果我添加一個新的PaymentFrequency,我不必改變任何下拉菜單。

這是一個枚舉的工作,還是我在這裏過於複雜?該字段可以用一個簡單的int來表示,但缺點是我不得不檢查它是否是有效的數字,因爲我只想要1和12之間的值(包括兩者),因此12 % n == 0

+2

這是enum的大用途;與它一起運行!不過,我會爲getName()方法選擇一個不同的名稱,因爲它與枚舉的內置name()方法非常相似。也許getDisplayName()。或者,如果您想要準備迎接國際市場的那一天,您可以使用枚舉名稱作爲密鑰的一部分,從屬性文件中查找顯示名稱。 – dnault

+0

我會說去爲枚舉。我認爲你的枚舉將處理所有你需要在你的代碼中處理的情況 – Pratik

+0

關於枚舉常量的事情是它們是編譯時常量。理想情況下,您應該使用數據存儲區,除非每次引入新的支付頻率時都要修改,編譯和部署代碼。 – CKing

回答

4

壞碼的標誌之一是幻數。出現在代碼中的數字,但沒有記錄爲什麼數字在那裏(爲什麼這是12而不是11?)。

枚舉幾乎總是超過您的需要,但它們幾乎總是正確的選擇。如果您需要爲這個課程添加功能,那麼做到這一點非常簡單。創建一個方法public Date getNextPaymentDate(Date lastPaymentDate)真的很容易。

擁有易於擴展的類使代碼更易於維護。