Распечатайте 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