2013-07-05 14 views
20

nel mio programma Java hanno classe Enum come ..Come convertire il valore della stringa in Enum in Java?

public enum DemoType{ 
DAILY, WEEKLY, MONTHLY; 
} 

E nel mio jsp sto prendendo i valori da utenti come casella di selezione e questo Jsp chiamato come DemoJspBean ..

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

mio HibernateVO classe è ..

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

Ora voglio inserire questo valore nel DB usando Hibernate Bean (setter e getter)

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

ma è spettacolo errore ..

Così come convertire il mio valore stringa in tipo di classe enum?

+1

possibile duplicato di [Java - Convertire String a enum] (http://stackoverflow.com/questions/604424/java -convert-string-to-enum) – tashuhka

risposta

46

Utilizzare il metodo valueOf nella classe Enum.

DemoType demoType = DemoType.valueOf("DAILY") 

Sarà gettare un IllegalArgumentException deve l'argomento stringa fornita non essere valido. Usando il tuo esempio

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

La linea di cui sopra genera un IllegalArgumentException perché HOURLY non fa parte del tuo metodo DemoType

+1

per favore .. voglio qualche chiarimento in più. – java

+0

Se il menu a discesa dell'interfaccia utente viene popolato utilizzando l'Enum, questo non dovrebbe essere un problema. Tuttavia, come pratica, è necessario aggiungere la convalida sui dati ricevuti dall'interfaccia utente prima di eseguire la logica di business. – ashoka

0

È possibile DemoType.valueOf utente() passando la stringa, che converte al DemoType enum corrispondente alla stringa. Assicurarsi che il valore di stringa sia lo stesso enum dichiarato. Per esempio

DemoType dt = DemoType.valueOf("DAILY") 
8

Questo può aiutare a capire come funzionano enum tipi.

Dire, Questa è la mia 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; 
    } 
    } 
} 

seguente mostra come il mio enum funziona

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

Funziona. Ma è troppo pesante. Se è così, non riesco a vedere il vantaggio dell'enum rispetto alla semplice classe. – Chao

4

Se per qualche motivo si utilizza un valore che non esiste nel enum (utilizzando il metodo DemoType.valueOf(), si otterrà un java.lang.IllegalArgumentException. Hey! aspetta !, è possibile scorrere nei valori:

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

L'output:

DAILY 
null 
+1

Il ritorno di null propaga il controllo nullo in tutta l'API che può essere facilmente evitato. Aggiungi invece un valore SCONOSCIUTO all'enumerazione da restituire nel caso non corrispondente. – i3ensays

1

Utilizzando TypeConverterSupport di primavera è possibile risolvere proprietà della stringa di enum esempio così:

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