Java 枚举返回整数值。

30 浏览
0 Comments

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日
0
0 Comments

如果你需要得到枚举的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

0
0 Comments

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中定义静态类的细节。

0