2013-07-05 32 views
20

Trong Chương trình Java của tôi có Enum lớp như ..Làm thế nào để chuyển đổi chuỗi giá trị thành Enum trong Java?

public enum DemoType{ 
DAILY, WEEKLY, MONTHLY; 
} 

Và trong jsp của tôi tôi lấy giá trị từ người dùng như hộp chọn và JSP này được gọi như DemoJspBean ..

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

My HibernateVO lớp là ..

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

Bây giờ tôi muốn chèn giá trị này vào DB sử dụng Hibernate Bean (setter và getter)

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

nhưng nó là chương trình lỗi ..

Vậy làm thế nào để chuyển đổi giá trị String của tôi vào lớp học kiểu enum?

+1

thể trùng lặp của [Java - Chuyển đổi String để enum] (http://stackoverflow.com/questions/604424/java -convert-string-to-enum) – tashuhka

Trả lời

46

Sử dụng phương thức valueOf trên lớp Enum.

DemoType demoType = DemoType.valueOf("DAILY") 

Nó sẽ ném số IllegalArgumentException nếu đối số chuỗi được cung cấp không hợp lệ. Sử dụng ví dụ của bạn

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

Dòng trên sẽ ném một IllegalArgumentExceptionHOURLY không phải là một phần của phương pháp DemoType

+1

làm ơn .. tôi muốn làm rõ thêm. – java

+0

Nếu trình đơn thả xuống trên giao diện người dùng được điền bằng Enum thì đây không phải là vấn đề. Tuy nhiên, với tư cách là người thực hành cần phải thêm xác thực vào dữ liệu nhận được từ giao diện người dùng trước khi thực hiện logic nghiệp vụ. – ashoka

0

Bạn có thể sử dụng DemoType.valueOf() bằng cách vượt qua chuỗi, mà sẽ chuyển đổi nó sang DemoType enum tương ứng với chuỗi. Hãy chắc chắn rằng giá trị String giống như khai báo enum. Ví dụ:

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

Điều này có thể giúp bạn hiểu cách hoạt động của enum.

Hãy nói, Đây là lớp học enum của tôi.

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

Tiếp theo cho thấy cách enum của tôi làm việc

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

Nó hoạt động. Nhưng nó quá nặng. Nếu vậy, tôi không thể thấy lợi ích của enum so với lớp đơn giản. – Chao

4

Nếu vì một số lý do bạn sử dụng một giá trị không tồn tại trong enum (sử dụng phương pháp DemoType.valueOf(), bạn sẽ nhận được một java.lang.IllegalArgumentException. Hey! chờ !, bạn có thể lặp lại thành các giá trị:

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

sản lượng:

DAILY 
null 
+1

Trả lại null tuyên truyền kiểm tra null trong suốt API có thể dễ dàng tránh được. Thay vào đó, thêm giá trị UNKNOWN vào enum để trả về trong trường hợp chưa từng có. – i3ensays

1

Sử dụng TypeConverterSupport Spring bạn có thể giải quyết bất động sản chuỗi enum Ví dụ như thế:

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