Java 枚举返回整数值。
Java 枚举返回整数值。
我在声明一个枚举时遇到了问题。我试图创建一个\'下载类型\'(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;
但是,我想让它不必要求\'值\'。我可能错了,但是这是Java中的几个类的工作方式,例如为设置字体风格,我们使用:
Font.PLAIN
这将返回一个int值,我们不使用:
Font.PLAIN.value
admin 更改状态以发布 2023年5月23日
如果你需要得到枚举的int值,只需在枚举里定义一个getter方法获取value即可:\n
private enum DownloadType { AUDIO(1), VIDEO(2), AUDIO_AND_VIDEO(3); private final int value; private DownloadType(int value) { this.value = value; } public int getValue() { return value; } } public static void main(String[] args) { System.out.println(DownloadType.AUDIO.getValue()); //returns 1 System.out.println(DownloadType.VIDEO.getValue()); //returns 2 System.out.println(DownloadType.AUDIO_AND_VIDEO.getValue()); //returns 3 }
\n或者你也可以简单地使用ordinal()方法,该方法将返回枚举常量在此枚举中的位置。\n
private enum DownloadType { AUDIO(0), VIDEO(1), AUDIO_AND_VIDEO(2); //rest of the code } System.out.println(DownloadType.AUDIO.ordinal()); //returns 0 System.out.println(DownloadType.VIDEO.ordinal()); //returns 1 System.out.println(DownloadType.AUDIO_AND_VIDEO.ordinal()); //returns 2
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 DownloadType { AUDIO, VIDEO, AUDIO_AND_VIDEO }
然后使用以下代码获取“value”:
DownloadType.AUDIO_AND_VIDEO.ordinal()
编辑:更正了代码.. Java不允许使用static class
。请参阅此SO答案,其中说明了如何在Java中定义静态类的细节。