Спочатку вам слід задати собі таке запитання: чи вам справді потрібен int?
Призначення перелічень - це колекція елементів (констант), які мають значення в коді, не покладаючись на зовнішнє значення (наприклад, int). Перерахування на Java можуть бути використані як аргумент для статусів перемикачів, і їх можна безпечно порівнювати, використовуючи оператор рівності "==" (серед інших).
Пропозиція 1 (не потрібно):
Часто за цим не потрібно ціле число, тоді просто використовуйте це:
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());
Резюме
- Не використовуйте ціле число разом із переліченням, якщо вам не потрібно.
- Не покладайтесь на використання
ordinal()
для отримання цілого числа переліку, оскільки це значення може змінитися, якщо ви зміните порядок (наприклад, вставивши значення). Якщо ви розглядаєте можливість використання, ordinal()
можливо, краще скористатися пропозицією 1.
- Зазвичай не використовуйте int-константи замість перелічень (як у прийнятій відповіді), оскільки ви втратите тип-безпеки.