私の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(セッターとゲッター)を使用してこの値をDBに挿入したい
DemoVO demo = new DemoVO();
demo.setRepeatType(demoJspBean.getRepeatWeektype());
しかし、それは表示エラーです。
では、文字列値を列挙クラス型に変換する方法は?
valueOf
クラスでEnum
メソッドを使用します。
DemoType demoType = DemoType.valueOf("DAILY")
指定された文字列引数が無効な場合、IllegalArgumentException
をスローします。あなたの例を使用して
DemoType demoType = DemoType.valueOf("HOURLY");
IllegalArgumentException
はHOURLY
の一部ではないため、上記の行はDemoType
をスローします。
これは、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
}
}
何らかの理由で、enumに存在しない値を使用する場合(メソッド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
SpringのTypeConverterSupportを使用すると、文字列プロパティを次のような列挙型インスタンスに解決できます。
@Value("${enum.type}")
MyEnum enum;
文字列を渡すことでDemoType.valueOf()メソッドを使用できます。これにより、文字列に対応するDemoType列挙型に変換されます。 String値が宣言された列挙型と同じであることを確認してください。例えば
DemoType dt = DemoType.valueOf("DAILY")