如何在Java中将字符串值转换为Enum?

时间:2013-07-05 04:21:22

标签: java spring hibernate enums

在我的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(setter和getter)将此值插入到数据库中

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

但显示错误..

那么如何将我的String值转换为枚举类类型?

5 个答案:

答案 0 :(得分:56)

valueOf课程中使用Enum方法。

DemoType demoType =   DemoType.valueOf("DAILY")

如果提供的字符串参数无效,它将抛出IllegalArgumentException。使用您的示例

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

上面一行会抛出IllegalArgumentException,因为HOURLY不属于DemoType

答案 1 :(得分:9)

这可以帮助您了解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
   }
}

答案 2 :(得分:4)

如果由于某种原因你使用枚举中不存在的值(使用方法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

答案 3 :(得分:1)

使用Spring的TypeConverterSupport,您可以将字符串属性解析为枚举实例,如:

@Value("${enum.type}") 
MyEnum enum;

答案 4 :(得分:0)

您可以通过传递字符串来使用DemoType.valueOf()方法,该字符串将其转换为与字符串对应的DemoType枚举。确保String值与声明的枚举相同。例如

    DemoType dt = DemoType.valueOf("DAILY")