Dans mon programme Java, j'ai la classe Enum comme ..
public enum DemoType{
DAILY, WEEKLY, MONTHLY;
}
Et dans mon JSP, je prends les valeurs d'utilisateur comme zone de sélection et ce Jsp appelé comme DemoJspBean
..
<form:select path="repeatWeektype">
<form:option value="DAILY" />
<form:option value="WEEKLY" />
<form:option value="MONTHLY" />
</form:select>
Ma classe HibernateVO est ..
public class DemoVO{
@Column(name = "REPEAT_TYPE")
@Enumerated(EnumType.STRING)
private RepeatType repeatType;
}
Maintenant, je veux insérer cette valeur dans DB en utilisant Hibernate Bean (setter et getter)
DemoVO demo = new DemoVO();
demo.setRepeatType(demoJspBean.getRepeatWeektype());
mais c'est show error ..
Alors, comment convertir ma valeur String en type de classe enum?
Utilisez la méthode valueOf
sur la classe Enum
.
DemoType demoType = DemoType.valueOf("DAILY")
Cela lancera une IllegalArgumentException
si l'argument de chaîne fourni est invalide. En utilisant votre exemple
DemoType demoType = DemoType.valueOf("HOURLY");
La ligne ci-dessus lancera une IllegalArgumentException
car HOURLY
ne fait pas partie de votre DemoType
Cela peut vous aider à comprendre comment fonctionnent les types enum
.
Dis, ceci est ma classe 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;
}
}
}
Ce qui suit montre comment ma enum
fonctionne
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
}
}
Si pour une raison quelconque vous utilisez une valeur qui n'existe pas dans l'énumération (en utilisant la méthode DemoType.valueOf()
, vous obtiendrez un Java.lang.IllegalArgumentException
. Hé! Attendez !, vous pouvez parcourir les valeurs suivantes:
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;
}
}
Le résultat:
DAILY
null
En utilisant TypeConverterSupport de Spring, vous pouvez résoudre la propriété string en énumérant une instance comme suit:
@Value("${enum.type}")
MyEnum enum;
Vous pouvez utiliser la méthode DemoType.valueOf () en transmettant la chaîne, qui la convertira en l'énumération DemoType correspondant à la chaîne. Assurez-vous que la valeur de chaîne est identique à l'énumération déclarée. Par exemple
DemoType dt = DemoType.valueOf("DAILY")