2013-07-05 16 views
20

w moim programie Java mieć klasy Enum jak ..Jak przekonwertować wartość ciągu na wyrażenie w języku Java?

public enum DemoType{ 
DAILY, WEEKLY, MONTHLY; 
} 

I w moim JSP Biorę wartości od użytkownika jak pole zaznaczania i tym JSP o nazwie jak DemoJspBean ..

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

My HibernateVO Klasa jest ..

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

teraz chcę wstawić tę wartość do DB przy użyciu hibernacji Bean (setter i getter)

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

ale jest pokaz błąd ..

Jak przekonwertować wartości typu klasy String do wyliczenia?

+1

możliwe duplikat [Java - Konwersja String na ENUM] (http://stackoverflow.com/questions/604424/java -convert-string-to-enum) – tashuhka

Odpowiedz

46

Użyj metody valueOf na klasie Enum.

DemoType demoType = DemoType.valueOf("DAILY") 

Przerzuci to IllegalArgumentException, jeśli podany argument będzie niepoprawny. Korzystanie z przykładu

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

Linia powyżej wygeneruje IllegalArgumentException ponieważ HOURLY nie jest częścią metody swojej DemoType

+1

proszę .. chcę trochę więcej wyjaśnień. – java

+0

Jeśli lista rozwijana w interfejsie użytkownika zostanie wypełniona przy użyciu opcji Wyliczenie, nie powinno to stanowić problemu. Jednak jako praktyka należy dodać sprawdzanie poprawności danych otrzymanych z interfejsu przed wykonaniem logiki biznesowej. – ashoka

0

Można DemoType.valueOf użytkownika() przekazując ciąg, który będzie przekonwertować go do DemoType enum odpowiadający ciągowi znaków. Upewnij się, że wartość ciągu jest taka sama, jak w deklarowanym wyliczeniu. Na przykład

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

To może pomóc zrozumieć, jak działają enum typy.

Powiedz, to jest moja klasa 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; 
    } 
    } 
} 

Po pokazuje, jak działa mój 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 
    } 
} 
+0

To działa. Ale to zbyt duża waga. Jeśli tak, nie widzę korzyści z wyliczenia w porównaniu do zwykłej klasy. – Chao

4

Jeśli z jakiegoś powodu użycia wartości, która nie istnieje w enum (stosując metodę DemoType.valueOf(), dostaniesz java.lang.IllegalArgumentException Hej. czekać !, można iteracyjne do wartości:

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

dane wyjściowe:

DAILY 
null 
+1

Zwracana wartość null propaguje zerowe sprawdzanie w całym interfejsie API, którego można łatwo uniknąć. Zamiast tego dodaj wartość UNKNOWN do wyliczenia, które ma zostać zwrócone w niedopasowanym przypadku. – i3ensays

1

Korzystanie TypeConverterSupport Wiosny można rozwiązać właściwość ciąg do wyliczenia wystąpienie tak:

@Value("${enum.type}") 
MyEnum enum; 
Powiązane problemy