我在声明枚举时遇到麻烦。我试图创建的是“ 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)工作的方式,例如,设置字体样式,您可以使用:
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
as 定义为:
enum DownloadType { AUDIO, VIDEO, AUDIO_AND_VIDEO }
并使用
DownloadType.AUDIO_AND_VIDEO.ordinal()
编辑:更正了代码。. static class
在Java中是不允许的。请参阅此SO答案,其中包含有关如何在Java中定义静态类的说明和详细信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句