Java枚举的缺点是什么?

时间:2019-07-16 16:52:36

标签: java enums jhipster

在看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
}

使用枚举有什么弊端吗?

3 个答案:

答案 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常量复杂,具有更多功能和细微差别。查看有关枚举的toStringname方法之间的区别的this问题。

如果您需要更改String常量的值,则它是单行更改。对于枚举,由于name和toString具有单独的值,并且可能在条件逻辑中使用这些值,因此变得更加复杂。