1

假设我有一个实体user (id, name, user_type, address, access_level, and_so_on)

这里有 2 个属性很重要,user_type并且access_level. 我们知道 user_type 和 access_level 字段中会有一个固定值,但是很难记住 1 ,2 或 3 的含义,因此我们为这些值创建常量以通过名称访问它们。比如如果 user_type 值为 1,它是一个普通用户,2 表示 CSV 用户,3 表示管理员用户,4 表示 root 用户。

通常,我在同一个实体 Bean 类中定义这些常量,该实体 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 个单独的类(更多依赖项)?
4

1 回答 1

1

正如@RJ 建议的那样,最好的选择是创建一个单独的枚举:

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 中)。缺乏这种完成可能是不将这些常量定义为层次结构之外的整数的主要原因。

于 2013-10-28T08:04:58.420 回答