web-dev-qa-db-fra.com

Comment convertir une valeur de chaîne en Enum en Java?

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?

27
java

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

56
kolossus

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

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;
1

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")
0
ashoka