2010-03-08 29 views
9

Tôi đã xác định Enums của mình như thế này.Cách dễ nhất để đưa Enum vào cặp Giá trị chính

public enum UserType { 

    RESELLER("Reseller"), 

    SERVICE_MANAGER("Manager"), 

    HOST("Host"); 

    private String name; 

    private UserType(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

} 

Cách dễ nhất để có được cặp khóa-giá trị tạo thành giá trị enum là gì?

Bản đồ đầu ra tôi muốn tạo nên như thế này

key = Enum(example:- HOST) 
value = Host 

Bản đồ Tôi muốn làm xác định là

Map<String, String> constansts = new HashMap<String, String>(); 

Ans: Điều gì I Did

tôi đã tạo ra một Generic Phương thức truy cập bất kỳ enum nào và thay đổi các giá trị từ đó thành Map. Tôi đã nhận IDEA này, tạo thành một đoạn mã được tìm thấy tại đây trong bất kỳ chủ đề nào khác.

public static <T extends Enum<T>> Map<String, String> getConstantMap(
     Class<T> klass) { 

    Map<String, String> vals = new HashMap<String, String>(0); 

    try { 
     Method m = klass.getMethod("values", null); 
     Object obj = m.invoke(null, null); 

     for (Enum<T> enumval : (Enum<T>[]) obj) { 
      vals.put(enumval.name(), enumval.toString()); 
     } 

    } catch (Exception ex) { 
     // shouldn't happen... 
    } 

    return vals; 
} 

Bây giờ, sau tất cả những gì tôi phải làm là gọi phương thức này với tất cả các cấu trúc enum và tôi đã xong.

One More điều

Để này làm tôi phải orverride Phương pháp toString như

public String toString() { 
     return name; 
    } 

Cảm ơn này.

+0

nào bạn muốn enum hoặc chuỗi để là chìa khóa? – Carl

+0

thay vì tất cả các công cụ phản ánh, bạn chỉ có thể làm 'klass.getEnumConstants()' – user102008

Trả lời

17

Miễn là bạn cần để ánh xạ từ các giá trị văn bản đến các trường hợp enum:

Map<String, UserType> map = new HashMap<String, UserType>(); 
map.put(RESELLER.getName(), RESELLER); 
map.put(SERVICE_MANAGER.getName(), SERVICE_MANAGER); 
map.put(HOST.getName(), HOST); 

hoặc một cách tiếp cận chung chung hơn:

for (UserType userType : UserType.values()) { 
    map.put(userType.getName(), userType); 
} 
+2

Đây thực sự là cách HARD. Không tồn tại bất kỳ thứ gì ngoài hộp? Phải có một cái gì đó ........ –

+0

@ vijay.shad xem bản cập nhật của tôi. Nếu bạn cung cấp thêm chi tiết trong câu hỏi của bạn, bạn tăng cơ hội nhận được chính xác những gì bạn đang tìm kiếm :-) –

+0

Không có cách nào dễ dàng hơn cho bạn bởi Java ... xin lỗi – malaverdiere

11

Bạn có thể sử dụng các giá trị() phương pháp trên enum, cho bạn tất cả các kết hợp có thể, và đặt nó vào bản đồ bằng cách sử dụng trình lặp.

Map<String, UserType> map = new HashMap<String, UserType>(); 
for (UserType userType : UserType.values()) { 
    map.put(userType.name(), userType); 
} 
Các vấn đề liên quan