Научитесь создавать перечисление Java, где каждая константа перечисления может содержать несколько значений. Мы можем использовать любое из значений константы перечисления в нашем коде приложения, и мы должны иметь возможность получить константу перечисления из любого из присвоенных ей значений.
1. Как создать перечисление с несколькими значениями
Синтаксис создания перечисления с несколькими значениями очень похож на синтаксис перечисления с одним назначенным ему значением. Чтобы получить перечисление с разными значениями, нам нужно выполнить следующие шаги:
- Создать конструктор перечисления, который принимает несколько значений
- Назначьте каждый аргумент конструктора полю-члену в определении перечисления.
- Создайте методы получения, чтобы мы могли получить доступ к любому значению, назначенному определенной константе перечисления.
- Создайте метод обратного поиска, чтобы мы могли получить константу перечисления из любого присвоенного ей значения перечисления.
2. Пример перечисления с несколькими значениями
В данном примере мы создаем перечисление AccountStatus. В нашем приложении мы можем обозначить статус учетной записи любым из нескольких значений.
Например, мы можем указать активный статус с помощью строк «A», «active» и даже целого значения 1. Аналогично, другим статусам может быть присвоено несколько значений.
Вот исходный код такого перечисления.
публичный enum AccountStatus{PURGED("P", "очищено", -1),НЕАКТИВЕН("Я", "неактивен", 0),АКТИВНЫЙ("А", "активный", 1);частная конечная строка shortName;частная конечная строка fullName;частный конечный код int;AccountStatus(String shortName, String fullName, int code) {это.короткоеИмя = короткоеИмя;это.полноеИмя = полноеИмя;этот.код = код;}публичная строка getShortName() {вернуть короткоеИмя;}публичная строка getFullName() {вернуть полноеИмя;}публичный int getCode() {код возврата;}// Методы обратного поискаpublic static Необязательно<AccountStatus> getAccountStatusByValue(строковое значение) {вернуть Массивы.поток(СтатусСчета.значения()).filter(accStatus -> accStatus.shortName.equals(значение)|| accStatus.fullName.equals(значение)).findFirst();}public static Необязательно<AccountStatus> getAccountStatusByValue(int value) {вернуть Массивы.поток(СтатусСчета.значения()).filter(accStatus -> accStatus.code == значение).findFirst();}}
Давайте посмотрим, как использовать это перечисление в нашем приложении. Сначала мы перечислим все статусы, доступные в приложении. Затем мы применим обратный просмотр, чтобы увидеть, какая константа перечисления связана со значением 0 или строкой «A».
импорт java.util.Arrays;импорт java.util.Необязательно;публичный класс EnumWithMultipleValues{public static void main(String[] args){//Вывести все перечисления и значениядля(СтатусАккаунта как : СтатусАккаунта. значения()) {System.out.println("Статус " + as.getCode() + " равен: " + as.getFullName());}//Примеры обратного поискаНеобязательно<СтатусСчета> statusEnum= AccountStatus.getAccountStatusByValue(0);если(statusEnum.isPresent()) {System.out.println("Полное имя статуса учетной записи: " + statusEnum.get().getFullName());System.out.println("Короткое имя статуса учетной записи: " + statusEnum.get().getShortName());}Необязательно<СтатусУчетнойЗаписи> activeStatusEnum= AccountStatus.getAccountStatusByValue("A");если(statusEnum.isPresent()) {System.out.println("Полное имя статуса учетной записи: " + activeStatusEnum.get().getFullName());System.out.println("Код статуса учетной записи: " + activeStatusEnum.get().getCode());}}}
Вывод программы.
Статус -1: очищеноСтатус 0: неактивенСтатус 1: активенСтатус учетной записи Полное имя: неактивноСтатус аккаунта Краткое имя: IСтатус учетной записи Полное имя: активныйКод статуса счета: 1