2010-03-08 21 views
9

Enemlerimi bu şekilde tanımladım.Temel Değer çifti için Enum'u almanın en kolay yolu

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

} 

Ne anahtar-değer çifti enum değerlerini oluşturmak almanın en kolay yolu olmalıdır?

ben bu

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

Ben tanımlıyorsunuz istediğiniz harita gibi olmalıdır oluşturmak istediğiniz çıkış haritası

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

Ans: Ben

mü ben bir Genel oluşturduk neler Herhangi bir enumeye erişme ve bundan bir Haritaya değer değiştirme yöntemi. Bu IDEA'yı aldım, burada başka bir iş parçacığında bulunan bir kod parçası oluşturdum. Tek yapmam gereken bu tüm enum yapıları ile bu yöntemi çağırın ve ben Bitti am sonra Şimdi

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

.

Bir

Bu halletmek için fazla bir şey ben bu

public String toString() { 
     return name; 
    } 

teşekkür gibi toString Yöntemi orverride gerekiyor.

+0

kullandığını düşünüyorum enum veya anahtarı olmak dize istiyoruz? – Carl

+0

tüm bu yansıma şeyleri yerine, sadece 'klass.getEnumConstants() ' – user102008

cevap

17

Sağlanan enum örneklerine metinsel değerlerinden haritasına gerekir:

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

veya daha genel bir yaklaşım:

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

yapabilirsiniz. Bu gerçekten çok SERT yoludur. Kutunun dışında bir şey yok mu? Bir şey olmalı ........ –

+0

@ vijay.shad Güncellememi görün. Sorunuzda daha fazla ayrıntı verirseniz, tam olarak aradığınızı tam olarak bulma olasılığınızı artırın :-) –

+0

Java tarafından size verilen daha kolay bir yol yoktur ... üzgünüm – malaverdiere

11

Sen enum değerleri() yöntemini kullanabilirsiniz, Tüm olası kombinasyonları size verir ve bunu tekrarlayıcı kullanarak bir haritaya yerleştirirsiniz.

Map<String, UserType> map = new HashMap<String, UserType>(); 
for (UserType userType : UserType.values()) { 
    map.put(userType.name(), userType); 
} 
İlgili konular