首先你应该问自己以下问题:你真的需要一个 int 吗?
枚举的目的是拥有一组项目(常量),它们在代码中具有意义,而不依赖于外部值(如 int)。Java 中的枚举可以用作 switch 语句的参数,并且可以使用“==”等式运算符(以及其他)安全地比较它们。
建议 1(不需要 int):
通常它后面不需要一个整数,然后简单地使用它:
private enum DownloadType{
AUDIO, VIDEO, AUDIO_AND_VIDEO
}
用法:
DownloadType downloadType = MyObj.getDownloadType();
if (downloadType == DownloadType.AUDIO) {
//...
}
//or
switch (downloadType) {
case AUDIO: //...
break;
case VIDEO: //...
break;
case AUDIO_AND_VIDEO: //...
break;
}
提案2(需要int):
然而,有时将枚举转换为 int 可能很有用(例如,如果外部 API 需要 int 值)。在这种情况下,我建议使用toXxx()
-Style 将方法标记为转换方法。用于打印覆盖toString()
。
private enum DownloadType {
AUDIO(2), VIDEO(5), AUDIO_AND_VIDEO(11);
private final int code;
private DownloadType(int code) {
this.code = code;
}
public int toInt() {
return code;
}
public String toString() {
//only override toString, if the returned value has a meaning for the
//human viewing this value
return String.valueOf(code);
}
}
System.out.println(DownloadType.AUDIO.toInt()); //returns 2
System.out.println(DownloadType.AUDIO); //returns 2 via `toString/code`
System.out.println(DownloadType.AUDIO.ordinal()); //returns 0
System.out.println(DownloadType.AUDIO.name()); //returns AUDIO
System.out.println(DownloadType.VIDEO.toInt()); //returns 5
System.out.println(DownloadType.VIDEO.ordinal()); //returns 1
System.out.println(DownloadType.AUDIO_AND_VIDEO.toInt()); //returns 11
概括
- 如果不需要,不要将整数与枚举一起使用。
- 不要依赖于使用
ordinal()
获取枚举的整数,因为如果您更改顺序(例如通过插入值),此值可能会更改。如果您正在考虑使用ordinal()
它可能会更好地使用提案 1。
- 通常不要使用 int 常量而不是枚举(如在接受的答案中),因为您将失去类型安全性。