Java 枚举返回 Int

标签 java enums

我在声明枚举时遇到问题。我要创建的是“DownloadType”的枚举,其中有 3 种下载类型(AUDIO、VIDEO、AUDIO_AND_VIDEO)。

我实现的代码如下:

private enum DownloadType {
    AUDIO(0), VIDEO(1), AUDIO_AND_VIDEO(2);
    private final int value;

    private DownloadType(int value) {
        this.value = value;
    }
}

如果我像这样使用它,这会很好:

DownloadType.AUDIO_AND_VIDEO.value;

但是,我希望这样我就不必询问“值(value)”。我可能弄错了,但这是几个类在 Java 中的工作方式,例如 Font,例如设置字体样式,您使用:

Font.PLAIN

它返回一个 int 值,我们不使用:

Font.PLAIN.value

最佳答案

Font.PLAIN 不是一个枚举。它只是一个 int。如果您需要从枚举中取出值,则无法避免调用方法或使用 .value,因为枚举实际上是其自身类型的对象,而不是原语。

如果你真的只需要一个int并且你已经接受类型安全丢失了,用户可能会向你的API传递无效值,你也可以将这些常量定义为 int:

public final class DownloadType {
    public static final int AUDIO = 0;
    public static final int VIDEO = 1;
    public static final int AUDIO_AND_VIDEO = 2;

    // If you have only static members and want to simulate a static
    // class in Java, then you can make the constructor private.
    private DownloadType() {}
}

顺便说一下,value字段其实是多余的,因为还有一个.ordinal()方法,所以你可以定义enum 作为:

enum DownloadType { AUDIO, VIDEO, AUDIO_AND_VIDEO }

并使用

获得“值(value)”
DownloadType.AUDIO_AND_VIDEO.ordinal()

编辑:更正了代码。Java 中不允许使用 static class。见 this SO answer关于如何在 Java 中定义静态类的解释和详细信息。

关于Java 枚举返回 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13792110/

相关文章:

java - Applet 需要读取位于 JAR 外部的 XML

java.lang.NumberFormatException : For input string ComboBox

java - 使用 Hibernate 查询数据库时出现语法错误

swift - 从枚举中获取关联值,无需 switch/case

c++ - 如何正确使用 C++ 强类型枚举?

java - 类中的枚举助手 (Java)

java - 无法构建 piggybank ->/home/build/ivy/lib 不存在

java - 如果我在数据库中将时间存储为 ServerValue.TIMESTAMP,如何从 FirebaseFirestore 检索 RecyclerView 中的日期和时间

Typescript Map<enum, set<enum>> "No overload matches this call",但我不明白为什么?

c# - 为什么在调试时而不是在运行时检查时会出现异常/从数据库映射枚举的最佳实践是什么