Перечисление с настроенными значениями и значением по умолчанию - PullRequest
0 голосов
/ 12 октября 2018

Как получить имя перечисления, используя значение.Передавая JOHN, мне нужно извлечь значение как одиночное

public enum Status {
    JOHN("single"),
    ALEX("married"),
    MARTHA("not known");
}

Возможно ли иметь значение по умолчанию, а значение в случае не совпадает?

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Для этого вам нужно определить конструктор и переменную String.Затем вы можете создать метод получения, возвращающий переменную String:

public enum Status {
    JOHN("single"),
    ALEX("married"),
    MARTHA("not known");
    private String value;
    private Status(String str) {
       value = str;
    }
    public String getValue() {
        return this.value;
    }
}

И затем получить значение, которое вы можете сделать:

Status.JOHN.getValue()

Чтобы получить перечисление из String Вы можете использовать метод valueOf():

Status.valueOf("JOHN").getValue();

Однако это приведет к ошибке, если введенный String не соответствует перечислению.Вы можете либо обернуть его в try-catch, чтобы назначить ему значение по умолчанию:

try {
   Status.valueOf("JOHN").getValue();
} catch(IllegalArgumentException e) {
   //Assign default
}

Однако лучше было бы поместить варианты в HashMap и посмотреть, является ли введенный Stringв HashMap:

Map<String, Status> status = new HashMap<>();
status.put("JOHN", Y.JOHN);
if(status.containsKey(input)) {
   //Do stuff
} else {
  //Assign default 
}
0 голосов
/ 12 октября 2018

Перечисление Java - это объект, как и большинство других объектов.Вы можете предоставить ему поля, методы и конструкторы.

В этом случае вы можете предоставить поле marriage и установить его в конструкторе, как и для любого другого объекта.

Посетите официальную страницу перечислений Java, чтобы увидеть официальные примеры, в частности пример с планетами для вашего случая. Учебники по Java: типы перечислений


Обратите внимание, что вы можете не захотеть представлять эти конкретные данные как перечисление.Таким образом, вы будете ограничены только этими 3 конкретными людьми. Это уместно только в том случае, если вы знаете, что у вас определенно будет только этот конкретный список людей за все время существования этого кода. В противном случае вам следует просто использовать обычный объект.

Лучшая идеяможет быть, иметь список брака и дать вашим людям поле этого типа.

public enum MarriageStatus
{
    Married,
    NotMarried,
    Unknown;
}

public class Person
{
    String name = "Unknown";
    MarriageStatus marriageStatus = MarriageStatus.Unknown;
}
0 голосов
/ 12 октября 2018

Определите ваше перечисление как

enum Status {
    JOHN("single"), ALEX("married"), MARTHA("not known");

    private String value;

    private Status(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

}

Теперь, чтобы получить значение:

System.out.println(Status.JOHN.getValue());

Здесь определите параметризованный конструктор для каждого перечисления и сохраните это значение в переменной-члене.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...