2013-10-28 78 views
1

假設我有user (id, name, user_type, address, access_level, and_so_on)最好的地方來定義常量值的變量實體bean在Java中

這2個屬性是很重要的,user_typeaccess_level的實體。我們知道在user_type和access_level字段中會有一個固定值,但它很難記住1,2或3的含義,因此我們爲這些值創建常量以便按名稱訪問它們。如user_type值爲1,其爲普通用戶,2表示CSV用戶,3表示admin用戶,4表示平均root用戶。

通常,我將這些常量定義在包含字段的同一個實體Bean類中,以將該值保存在數據庫中(或以前)。

public UserBean implements IBean { 
... 
/** 
    * constant for user type 
    */ 
    public static final int USER_TYPE_NORMAL = 1; 
    public static final int USER_TYPE_CSV = 2; 
    public static final int USER_TYPE_ADMIN = 3; 
    public static final int USER_TYPE_ROOT = 4; 


    /** 
    * constant for Access level 
    */ 
    public static final int ACCESS_LEVEL_SILVER = 1; 
    public static final int ACCESS_LEVEL_GOLD = 2; 
    public static final int ACCESS_LEVEL_DIMOND = 3; 
... 
} 

所以我的問題是,什麼是最好的地方(以及爲什麼)來定義它們? (我能想到,但你可以定義任何方法)

  1. 在上述相同的類。我這樣做是因爲我不必記住其他任何東西,因爲如果我知道它的用戶,那麼它的相關信息可以在UserBean類中找到,自動實體生成器工具可能會覆蓋它們)。
  2. 創建一個包含與用戶相關的所有常量的新類,該常量類的名稱應該是什麼(易於記憶/或猜測)?
  3. 爲每個類型的常量創建2個單獨的類(更多依賴)?
+2

IMO,[Enums](http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)似乎符合您案例中的法案(並且命名可以像'UserTypeEnum', 'AccessLevelEnum'等)。 – SudoRahul

回答

1

正如@ R.J建議,最好的選擇是創建一個單獨的枚舉:

enum UserType{ 
    NORMAL, CSV, ADMIN, ROOT; 
} 

Pro: 
    takes less space 
    static types 
    code completion 

Contra: 
    takes a bit more memory per entity (8 bytes vs 16 bytes at x64 architecture) 

其他常用蔓延選擇是定義這些常數作爲超整數。這會減少內存消耗和代碼完成(至少在IntelliJ Idea中)。缺乏這種完成可能是不把這些常量定義爲層次結構之外的整數的主要原因。

相關問題