我在声明枚举时遇到问题。我要创建的是“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/