在看jhipster时,我偶然发现了以下课程
public final class AuthoritiesConstants {
public static final String ADMIN = "ROLE_ADMIN";
public static final String USER = "ROLE_USER";
public static final String ANONYMOUS = "ROLE_ANONYMOUS";
private AuthoritiesConstants() {
}
}
我想知道为什么他们不使用枚举之类的东西
public enum AuthoritiesConstants {
ROLE_ADMIN,
ROLE_RESPONSABLE,
ROLE_MANAGER,
ROLE_COLLABORATEUR
}
使用枚举有什么弊端吗?
答案 0 :(得分:3)
一个可能的答案是在Java 1.5中引入了枚举。尽管这似乎是古老的历史,但出于兼容性原因,某些库仍使用字符串常量或数字常量。
另一个可能的答案是,它们实际上不是语义上的枚举元素,而是外部接口使用的常量,并且只能通过其字符串值进行访问。在这种情况下,每次使用枚举并调用name()
将是多余的。
除此之外,在这种情况下,永远不要对字符串常量使用枚举。
答案 1 :(得分:1)
1。。这与类一样,它扩展了java.lang.Enum,因此您无法扩展 其他枚举。另一个潜在的问题是你不适应 JSP中的表达语言(EL)。
2。。有些事情可以在普通班级完成,但也许您可以 与枚举类无关,因为它是一个特殊的类。例如, 访问构造函数中无法使用的静态字段 枚举。
3。。使用JSP时,您将无法访问枚举或
调用枚举常量,因为它不受支持(可能
在EL版本3.0之后)
这些是主要缺点。
。
答案 2 :(得分:1)
如果仅将值真正地引用为String,那么为了简单起见,我将其保留为String常量。
枚举比String常量复杂,具有更多功能和细微差别。查看有关枚举的toString
和name
方法之间的区别的this问题。
如果您需要更改String常量的值,则它是单行更改。对于枚举,由于name和toString具有单独的值,并且可能在条件逻辑中使用这些值,因此变得更加复杂。