2013-03-15 18 views
11

Bir dize değerine sahibim, ayrıca dizeleri içeren bir dizi ve ayrıca aralığı içeren bir enum var.Enum dizisini string den alın?

Arrays.asList(myClass.BAUD_RATES).indexOf(username) 

Nasıl bir enum için bunu yapıyorsunuz: Bu yaz verilen değerinden, dizideki dizesinin indeksi almak için mi? Ordinal kullanabilir miyim? Yoksa kendi yöntemimi yapmak zorunda mıyım?

yöntem gidebilir gibi:

public enum Fruit { 
    ... 
    static public boolean isMember(String aName) { 
     Fruit[] aFruits = Fruit.values(); 
     for (Fruit aFruit : aFruits) 
      if (aFruit.fruitname.equals(aName)) 
       return aFruit; 
     return false; 
    } 
    ... 
} 

cevap

56

emin değil seni doğru anladıysam ama belki

YourEnum.valueOf("VALUE").ordinal(); 
    adıyla
  • YourEnum.valueOf("VALUE") döner sıralama değeri VALUE
  • ve arıyorsanız her enum değeri, ordinal() yöntemini kullanarak görebileceğimiz konumunu (sıfıra endeksli) bilir.
+0

Teşekkür Adamlar cevap veriyor, hepsi işe yarıyor, görünüşe göre bu benim sorunum değildi. Sorun şu ki, kütüphaneyi ararsam, dize dizisinde 9600 deyince, iyi çalışıyor. Fakat enumda aynı değeri ararken enumda bir değer olmadığını söyledi. 03-15 16: 04: 19.925: E/AndroidRuntime (19719): Nedeniyle: java.lang.IllegalArgumentException: 19200 slickdevlabs.apps.usb2seriallib.SlickUSB2Serial $ BaudRate'de bir sabit değil, bu yüzden sadece dizi dizisini kullanacağım. .. Neden böyle bir fikir yok. Neyse ki kütüphane de bir dizi dizisi verdi. – Paul

10

Sana sorguluyorlar ama aynı kod çok çeteleler için uygun olduğunu anlamak olmayabilir: seni

int index = YourEnum.valueOf("ENUM_ITEM").ordinal(); 
2

Dizini almak istiyorsanız:

int index = Arrays.asList(YourEnum.values()).indexOf(YourEnum.ENUM_ITEM); 

Yoksa alabilirsiniz sıralı kullanabilir. String'e belirli bir değer atamak isterseniz, onu almak için kendi yönteminizi tanımlayabilirsiniz.

for(DAY s : DAY.values()) 
    { 
     System.out.println(s.ordinal()); 
     System.out.println(s.getValue()); 
    } 
0

aşağıdaki mantık da çalışacaktır:

enum DAY 
{ 
    MONDAY(10), 
    TUESDAY(20); 
    int value; 
    DAY(int x) 
    { 
    this.value = x; 
    } 
    public int getValue() 
    { 
    return value; 
    } 

Şimdi değer ve sıralı olarak alınabilir.

denetlemek istediğiniz ve fruitname zaten deneyin Pshemo

for (Fruit aFruit : aFruits) 
      if (aFruit.name().equals(aName)) 
       return aFruit.ordinal(); 
1

tarafından bahsedilen yaklaşımı ile gitmek döngü bu basit çözüm kullanmayan biliyorsanız: Herkes için

Fruit.values()[index]