it-swarm.com.de

Wie konvertiere ich den String-Wert in Enum in Java?

In meinem Java-Programm gibt es eine Enum-Klasse wie ..

public enum DemoType{
DAILY, WEEKLY, MONTHLY;
 }

Und in meinem Jsp nehme ich Werte von Benutzer wie select box und dieses Jsp nannte sich wie DemoJspBean ..

<form:select path="repeatWeektype">
    <form:option value="DAILY" />
    <form:option value="WEEKLY" />
    <form:option value="MONTHLY" />
</form:select>

Meine HibernateVO-Klasse ist ..

public class DemoVO{
  @Column(name = "REPEAT_TYPE")
  @Enumerated(EnumType.STRING)
  private RepeatType repeatType;
}

Nun möchte ich diesen Wert mit Hibernate Bean (Setter und Getter) in die Datenbank einfügen.

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

aber es ist Fehler anzeigen ..

Wie konvertiere ich meinen String-Wert in einen Klassentyp der Enumeration?

27
java

Verwenden Sie die valueOf-Methode für die Enum-Klasse.

DemoType demoType =   DemoType.valueOf("DAILY")

Sollte das angegebene String-Argument ungültig sein, wird eine IllegalArgumentException ausgegeben. Verwenden Sie Ihr Beispiel

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

Die Zeile darüber wird eine IllegalArgumentException werfen, da HOURLY nicht Teil Ihrer DemoType ist.

56
kolossus

Dies kann Ihnen helfen zu verstehen, wie enum-Typen funktionieren. 

Sagen Sie, das ist meine enum-Klasse. 

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

Nachfolgend wird gezeigt, wie meine enum funktioniert 

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
   }
}

Wenn Sie aus irgendeinem Grund einen Wert verwenden, der nicht in der Aufzählung vorhanden ist (mit der Methode DemoType.valueOf() erhalten Sie einen Java.lang.IllegalArgumentException. Hey! Wait!), Sie können die Werte durchlaufen:

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

Die Ausgabe:

DAILY
null
4
Paul Vargas

Mit Spring's TypeConverterSupport können Sie die String-Eigenschaft so auflösen, dass eine Instanz wie folgt generiert wird:

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

Sie können die DemoType.valueOf () -Methode verwenden, indem Sie den String übergeben, der ihn in die dem String entsprechende DemoType-Enumeration konvertiert. Stellen Sie sicher, dass der String-Wert mit der deklarierten Aufzählung übereinstimmt. Zum Beispiel

    DemoType dt = DemoType.valueOf("DAILY")
0
ashoka