首先,您应该问自己以下问题:您真的需要一个int吗?
枚举的目的是拥有一个项目(常量)的集合,这些项目在代码中具有含义,而无需依赖于外部值(例如int)。Java中的枚举可以用作切换语句的参数,并且可以使用“ ==”等号运算符(除其他外)安全地进行比较。
提案1(不需要int):
通常不需要在其后的整数,然后只需使用以下命令:
private enum DownloadType{
AUDIO, VIDEO, AUDIO_AND_VIDEO
}
用法:
DownloadType downloadType = MyObj.getDownloadType();
if (downloadType == DownloadType.AUDIO) {
}
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() {
return String.valueOf(code);
}
}
System.out.println(DownloadType.AUDIO.toInt());
System.out.println(DownloadType.AUDIO);
System.out.println(DownloadType.AUDIO.ordinal());
System.out.println(DownloadType.AUDIO.name());
System.out.println(DownloadType.VIDEO.toInt());
System.out.println(DownloadType.VIDEO.ordinal());
System.out.println(DownloadType.AUDIO_AND_VIDEO.toInt());
概要
- 如果不需要,请不要将Integer与枚举一起使用。
- 不要依赖于使用
ordinal()
来获取枚举的整数,因为如果更改顺序(例如,通过插入值),则此值可能会更改。如果您正在考虑ordinal()
使用建议1,则可能会更好。
- 通常不要使用int常量而不是枚举(例如在接受的答案中),因为您将失去类型安全性。