2011-08-14 20 views
51

String'u, Enumeration numaralı Java'da eşdeğer bir değere dönüştürmem mümkün mü?Dizgiyi eşdeğer Enum değerine dönüştürme

Bunu elbette if-else büyük bir açıklamayla yapabilirim, ama mümkünse bunu önlemek isterim. Bu belgelere göz önüne alındığında

:

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

Bu IFS veya vakaya deyimi olmadan mümkün olduğunu çok umutlu değilim. Eğer (eski Enumeration sınıf söz beri çok belli değil) Java 5 Çeteleler kullanmak varsayarsak

cevap

123

farkında Umut, java.util.Enumeration farklıdır Java 1.5 Enum türleri.

Eşdeğer enum türünü almak için YourEnum.valueOf("String")'u kullanabilirsiniz.

Böylece sizin enum öylesine olarak tanımlanır ise: Bu yapabilirdi

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

:

String day = "SUNDAY"; 

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

evet teşekkürler sadece bunu gördüm http://download.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html – Ankur

13

, sen java.lang.Enum alt sınıfının valueOf yöntemi kullanabilirsiniz:

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

kullanın statik yöntem valueOf(String) her enum için tanımlanan.

Örneğin

Eğer enum MyEnum varsa Type.valueOf("enum string") aslında var olduğunu fark etmeden kendi çözüm mühendisliği üzerinde-MyEnum.valueOf("foo")

0

Ben ettik olabileceğini söyleyebiliriz.

Sanırım daha ayrıntılı bir kontrol sağlıyor ama gerçekten gerekli olduğundan emin değilim.

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

Ben potansiyel kodunu temizlemek olabilir RuntimeException (ya da her türlü istisnası atmak isteyen) için IllegalArgumentException alışverişi ediyoruz sanırım.