27

在我的 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)将此值插入 DB

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

但它是显示错误..

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

4

5 回答 5

56

使用类valueOf上的方法Enum

DemoType demoType =   DemoType.valueOf("DAILY")

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

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

上面的行会抛出一个IllegalArgumentException因为HOURLY不是你的一部分DemoType

于 2013-07-05T04:24:01.957 回答
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
   }
}
于 2013-07-05T05:08:59.370 回答
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
于 2013-07-05T05:13:43.593 回答
1

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

@Value("${enum.type}") 
MyEnum enum;
于 2017-05-10T14:13:39.773 回答
0

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

    DemoType dt = DemoType.valueOf("DAILY")
于 2013-07-05T04:24:16.907 回答