it-swarm.com.ru

Как преобразовать строковое значение в Enum в Java?

В моей Java-программе есть класс Enum как ...

public enum DemoType{
DAILY, WEEKLY, MONTHLY;
 }

И в моем JSP я принимаю значения от пользователя, как поле выбора, и этот 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 (сеттер и геттер)

DemoVO demo = new DemoVO();
demo.setRepeatType(demoJspBean.getRepeatWeektype());

но это ошибка шоу ..

Так как же преобразовать мое значение String в тип перечисления?

27
java

Используйте метод valueOf в классе Enum.

DemoType demoType =   DemoType.valueOf("DAILY")

Он выдаст IllegalArgumentException, если указанный строковый аргумент будет недействительным. Используя ваш пример

DemoType demoType =  DemoType.valueOf("HOURLY");

Строка выше выдает IllegalArgumentException, потому что HOURLY не является частью вашей DemoType

56
kolossus

Это может помочь вам понять, как работают типы 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
   }
}
9
Ruchira Gayan Ranaweera

Если по какой-то причине вы используете значение, которое не существует в перечислении (используя метод DemoType.valueOf(), вы получите Java.lang.IllegalArgumentException. Эй! Подождите !, вы можете перебирать значения:

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
Paul Vargas

Используя TypeConverterSupport в Spring, вы можете разрешить строковое свойство для перечисления экземпляра следующим образом:

@Value("${enum.type}") 
MyEnum enum;
1
Łukasz Chorąży

Вы можете использовать метод DemoType.valueOf (), передав строку, которая преобразует его в перечисление DemoType, соответствующее строке. Убедитесь, что значение String совпадает с объявленным enum. Например

    DemoType dt = DemoType.valueOf("DAILY")
0
ashoka