Java枚举return Int

克里斯蒂安:

我在声明枚举时遇到麻烦。我试图创建的是“ 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
kennytm:

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()方法,因此可以将enumas 定义为:

enum DownloadType { AUDIO, VIDEO, AUDIO_AND_VIDEO }

并使用

DownloadType.AUDIO_AND_VIDEO.ordinal()

编辑:更正了代码。. static class在Java中是不允许的。请参阅此SO答案,其中包含有关如何在Java中定义静态类的说明和详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章