Распечатайте Java ENUM в нижнем регистре по умолчанию, сохраняя константы перечисления в верхнем регистре

У меня есть ENUM в JAVA, я бы хотел сериализовать, так что, когда я вызываю его из любого места в коде, я получаю строчное представление имени.

Скажем, у меня есть следующее перечисление:

public enum Status {
    DRAFT, PENDING, COMPLETE;
}
println ("Status=" + Status.DRAFT);

Мне бы хотелось получить следующее:

Status=draft

[Примечание]: Я хочу использовать константы перечисления в верхнем регистре и при запросе значения получить представление в нижнем регистре.

Ответ 1

Я сам отвечаю на этот вопрос, поскольку нашел решение интересным и не смог найти ответ на сайте. На всякий случай кто-то ищет способ решить эту проблему.

Решение прост, просто переопределите метод Enum toString следующим образом:

public enum Status {
    DRAFT, PENDING, COMPLETE;

    @Override
    public String toString() {
        return name().toLowerCase();
    }
}
println ("Status=" + Status.DRAFT);

Это приведет к отображению имени в нижнем регистре.

Ответ 2

Другим решением может быть:

public enum Status {
  DRAFT, PENDING, COMPLETE;

  public String nameLowerCase(){
        return name().toLowerCase();
    }
}

Ответ 3

Если вы хотите использовать нижний регистр, вы можете просто использовать строчный регистр или смешанный футляр, или что-то другое имеет смысл для вас.

public enum Status {
    draft, pending, complete;
}

println ("Status=" + Status.draft);

печатает

Status=draft

Ответ 4

Вы можете использовать следующий класс Enum, который содержит конструктор с именем и порядковым номером для каждой константы перечисления. Вы можете назначить значения, необходимые для константы перечисления.

public enum Status {

DRAFT(0,"draft"), PENDING(1,"pending"), COMPLETE(2,"complete");

private int key;
private String value;

Status(int key, String value){
    this.key = key;
    this.value = value;
}

public int getKey() {
    return key;
}

public void setKey(int key) {
    this.key = key;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}

@Override
public String toString(){
    return this.value;
}

}

Так как мы переопределяем метод toString, возвращается значение, которое является строчным.

Использование

System.out.print("Status = "+Status.DRAFT);

будет печатать,

Status = draft

и

System.out.print("Status = "+Status.DRAFT.name());

будет печатать

Status = draft