假设我有一个用户实体(id、name、user_type、address、access_level 和_so_on)
这里有 2 个属性很重要,user_type
和 access_level
。我们知道 user_type 和 access_level 字段中会有固定值,但很难记住 1 、2 或 3 的含义,因此我们为这些值创建常量以通过名称访问它们。例如,如果 user_type 值为 1,则为普通用户,2 表示 CSV 用户,3 表示管理员用户,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;
...
}
所以我的问题是,定义它们的最佳位置(以及为什么)是什么? (我能想到,但你可以定义任何方法)
- 与上述相同的类别。我这样做是因为,我不必记住其他任何内容,因为如果我知道其用户,则可以在 UserBean 类中找到其相关信息,自动实体生成器工具可能会覆盖它们)。
- 创建一个包含与用户相关的所有常量的新类,该常量类的名称应该是什么(易于记住/或猜测)?
- 为每种类型的常量创建 2 个单独的类(更多依赖项)?
最佳答案
正如 @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)
其他常见的选项是将这些常量定义为父类(super class)中的整数。这将为您提供更少的内存消耗和代码完成(至少在 IntelliJ Idea 中)。缺乏这种完成可能是不将这些常量定义为层次结构之外的整数的主要原因。
关于java - 在 Java 中为实体 Bean 定义常量值变量的最佳位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19629199/