在看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
}
使用enums有什么缺点吗?
一个可能的答案是,枚举是在Java1.5中引入的。虽然这看起来像是古代历史,但出于兼容性的原因,一些库仍然使用字符串常量或数字常量。
另一个可能的答案是,这些不是真正语义上的枚举元素,而是外部接口使用的常量,并且只能通过其字符串值访问。在这种情况下,每次使用枚举并调用name()
将是多余的。
除此之外,在这种情况下,不应该在字符串常量上使用枚举。
1.它很像是extend java.lang.Enum的类,所以你不能扩展其他的Enum。另一个潜在的问题是你不能很好地使用JSP中的表达式语言(EL)。
2.有些事情可以在普通类中完成,但也许你不能用枚举类做,因为它是一个特殊的类。例如,访问构造函数中无法使用枚举的静态字段。
3. 当您使用 JSP 时,您不能访问枚举或
调用枚举常量,因为它不受支持(这在 EL 版本 3.0 之后是可能的)
这些都是主要的缺点。
.
如果一个值实际上只是作为字符串引用,那么为了简单起见,我会将其保留为字符串常量。
枚举比具有附加功能和细微差别的字符串常量更复杂。查看有关枚举的 toString
和 name
方法之间区别的问题。
如果您需要更改字符串常量的值,这是单行更改。使用枚举可能会变得更加复杂,因为name和toString具有单独的值,并且这些值可能在条件逻辑中使用。