Как преобразовать значение строки в Enum в Java?
В моей программе Java есть класс Enum, как..
public enum DemoType{
DAILY, WEEKLY, MONTHLY;
}
И в моем jsp я беру значения от пользователя, например select box, и этот Jsp называется DemoJspBean
..
<form:select path="repeatWeektype">
<form:option value="DAILY" />
<form:option value="WEEKLY" />
<form:option value="MONTHLY" />
</form:select>
Мой класс HibernateVO...
public class DemoVO{
@Column(name = "REPEAT_TYPE")
@Enumerated(EnumType.STRING)
private RepeatType repeatType;
}
Теперь я хочу вставить это значение в БД, используя Hibernate Bean (setter и getter)
DemoVO demo = new DemoVO();
demo.setRepeatType(demoJspBean.getRepeatWeektype());
но это ошибка отображения.
Итак, как преобразовать значение String в тип класса enum?
Ответы
Ответ 1
Используйте метод valueOf
в классе Enum
.
DemoType demoType = DemoType.valueOf("DAILY")
Он выдает IllegalArgumentException
, если строковый аргумент недействителен. Использование вашего примера
DemoType demoType = DemoType.valueOf("HOURLY");
В приведенной выше строке будет выбрано значение IllegalArgumentException
, потому что HOURLY
не является частью вашего DemoType
Ответ 2
Это может помочь вам понять, как работают типы enum
.
Скажем, это мой класс enum
.
public enum GetDate {
SUNDAY("1"), MONDAY("2"), TUESDAY("3"), WEDNESDAY("4"), THURSDAY("5"), FRIDAY("6"), SATURDAY("7");
private String code;
private GetDate(String code) {
this.code = code;
}
public String getCode() {
return code;
}
public static GetDate getEnum(String code) {
switch (code) {
case "1":
return SUNDAY;
case "2":
return MONDAY;
case "3":
return TUESDAY;
case "4":
return WEDNESDAY;
case "5":
return THURSDAY;
case "6":
return FRIDAY;
case "7":
return SATURDAY;
default:
return null;
}
}
}
Ниже показано, как работает мой enum
public class MyClass {
public static void main(String[] args) {
System.out.println("Sunday enum value " + GetDate.SUNDAY); // enum SUNDAY
System.out.println("Name of the day assign to 1 " + GetDate.getEnum("1")); // enum SUNDAY
System.out.println("Sunday enum value " + GetDate.valueOf("SUNDAY").getCode()); // String code of SUNDAY
System.out.println("Sunday enum value " + GetDate.valueOf("SUNDAY"));// enum Sunday
}
}
Ответ 3
Если по какой-либо причине вы используете значение, которое не существует в перечислении (с помощью метода DemoType.valueOf()
, вы получите java.lang.IllegalArgumentException
. Эй! Wait!, вы можете перебирать значения:
public static void main(String[] args) {
System.out.println(DemoType.convert("DAILY"));
System.out.println(DemoType.convert("YEARLY"));
}
enum DemoType {
DAILY, WEEKLY, MONTHLY;
public static DemoType convert(String str) {
for (DemoType demoType : DemoType.values()) {
if (demoType.toString().equals(str)) {
return demoType;
}
}
return null;
}
}
Выход:
DAILY
null
Ответ 4
Используя Spring TypeConverterSupport, вы можете разрешить свойство string для экземпляра перечисления следующим образом:
@Value("${enum.type}")
MyEnum enum;
Ответ 5
Вы можете использовать метод DemoType.valueOf(), передав строку, которая преобразует ее в перечисление DemoType, соответствующее строке. Убедитесь, что значение String совпадает с объявленным перечислением. Например
DemoType dt = DemoType.valueOf("DAILY")