2011-08-14 38 views
51

Tôi có thể chuyển đổi String thành giá trị tương đương trong một Enumeration bằng Java hay không.Chuyển đổi chuỗi thành giá trị Enum tương đương

Tôi có thể làm điều này với tuyên bố lớn if-else, nhưng tôi muốn tránh điều này nếu có thể.

Với tài liệu này:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html

Tôi không quá hy vọng rằng điều này là có thể mà không IFS hoặc một tuyên bố như vậy.

Trả lời

123

Hy vọng bạn nhận ra, java.util.Enumeration khác với Java 1.5 Enum loại.

Bạn chỉ cần sử dụng YourEnum.valueOf("String") để nhận loại enum tương đương.

Vì vậy, nếu enum của bạn được định nghĩa như vậy:

public enum Day { 
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
} 

Bạn có thể làm điều này:

String day = "SUNDAY"; 

Day dayEnum = Day.valueOf(day); 
+0

có cảm ơn bạn đã thấy http://download.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html này – Ankur

13

Giả sử bạn sử dụng Java 5 enums (mà không phải là như vậy nhất định kể từ khi bạn đề cập đến cũ Enumeration lớp), bạn có thể sử dụng phương pháp valueOf của java.lang.Enum lớp con:

MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS"); 
4

Sử dụng phương pháp tĩnh valueOf(String) xác định cho mỗi enum.

Ví dụ nếu bạn có enum MyEnum bạn có thể nói MyEnum.valueOf("foo")

0

tôi có thể đã qua chế giải pháp của riêng tôi mà không nhận ra rằng Type.valueOf("enum string") thực sự tồn tại.

Tôi đoán nó cung cấp khả năng kiểm soát chi tiết hơn nhưng tôi không chắc nó thực sự cần thiết.

public enum Type { 
    DEBIT, 
    CREDIT; 

    public static Map<String, Type> typeMapping = Maps.newHashMap(); 
    static { 
     typeMapping.put(DEBIT.name(), DEBIT); 
     typeMapping.put(CREDIT.name(), CREDIT); 
    } 

    public static Type getType(String typeName) { 
     if (typeMapping.get(typeName) == null) { 
      throw new RuntimeException(String.format("There is no Type mapping with name (%s)")); 
     } 
     return typeMapping.get(typeName); 
    } 
} 

Tôi đoán bạn đang trao đổi IllegalArgumentException cho RuntimeException (hoặc bất cứ điều gì ngoại trừ bạn muốn ném) mà khả năng có thể dọn dẹp mã.

Các vấn đề liên quan