提问者:小点点

Java中枚举的缺点是什么?


在看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有什么缺点吗?


共3个答案

匿名用户

一个可能的答案是,枚举是在Java1.5中引入的。虽然这看起来像是古代历史,但出于兼容性的原因,一些库仍然使用字符串常量或数字常量。

另一个可能的答案是,这些不是真正语义上的枚举元素,而是外部接口使用的常量,并且只能通过其字符串值访问。在这种情况下,每次使用枚举并调用name()将是多余的。

除此之外,在这种情况下,不应该在字符串常量上使用枚举。

匿名用户

1.它很像是extend java.lang.Enum的类,所以你不能扩展其他的Enum。另一个潜在的问题是你不能很好地使用JSP中的表达式语言(EL)。

2.有些事情可以在普通类中完成,但也许你不能用枚举类做,因为它是一个特殊的类。例如,访问构造函数中无法使用枚举的静态字段。

3. 当您使用 JSP 时,您不能访问枚举或
调用枚举常量,因为它不受支持(这在 EL 版本 3.0 之后是可能的)

这些都是主要的缺点。

.

匿名用户

如果一个值实际上只是作为字符串引用,那么为了简单起见,我会将其保留为字符串常量。

枚举比具有附加功能和细微差别的字符串常量更复杂。查看有关枚举的 toStringname 方法之间区别的问题。

如果您需要更改字符串常量的值,这是单行更改。使用枚举可能会变得更加复杂,因为name和toString具有单独的值,并且这些值可能在条件逻辑中使用。