2010-02-16 15 views
68

Bu problemi, gerçek değerlerini bilmeden gerçek enum türünü bilmeden anladım.Java'da tüm enum değerleri nasıl alınır?

if (value instanceof Enum){ 
    Enum enumValue = (Enum)value; 
} 

Herhangi fikirleri nasıl olası değerler enumValue dan ayıklamak için?

cevap

113
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants(); 
+0

Neden getDeclaringClass() kullanıyorsunuz? –

+3

@PeterKriens: '' enum' nesnesindeki 'getClass()' '' enum' türünün kendisinin _subtype_ını döndürdüğü için ('enum' sabiti' enum 'türünden bir yöntemi geçersiz kılarsa). 'getDeclaringClass()', sabit olarak bildirilen 'enum 'türünü döndürür, burada istediğinizi belirtir. – ColinD

+0

Teşekkürler! Bu vakayı fark etmemiştim ama haklısın, sabit anonim bir iç sınıf olabilir. –

13

Enum ler onlar yazıldığında o sadece lyke Class es vardır. Mevcut kodunuz, hangi Enum türünün bir parçası olduğunu belirtmeden bir Enum olup olmadığını kontrol eder.

Enum'un türünü belirtmediğiniz için, enum değerleri listesinin ne olduğunu bulmak için yansıma kullanmanız gerekir.

Öyle gibi yapabilirsiniz:

enumValue.getDeclaringClass().getEnumConstants() 

Bu, her seçenekten birinin olmak üzere Enum nesneleri dizisi döndürür.

2

... veya MyEnum.values ​​()? Yoksa bir şey mi özlüyorum? enum

tüm numaralama örneklerini verir

enum.values ​​() yöntemi

+0

Evet, enum'un gerçek sınıfı, Statik yöntem çağrısı yapmak için burada değil, yalnızca Enum'un bazı alt türlerinin bir örneğidir. – ColinD

58
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants(); 

ya

YourEnumClass[] yourEnums = YourEnumClass.values(); 
+0

'YourEnumClass [] yourEnums = YourEnumClass.class.getEnumConstants();' statik olmayan bir yöntemden arama sorunumu çözdü. – Jeremy

5

değerleri yöntemi.

public class EnumTest { 
     private enum Currency { 
     PENNY("1 rs"), NICKLE("5 rs"), DIME("10 rs"), QUARTER("25 rs"); 
     private String value; 
     private Currency(String brand) { 
       this.value = brand; 
     } 

     @Override 
     public String toString() { 
       return value; 
     } 
    } 

    public static void main(String args[]) { 

     Currency[] currencies = Currency.values(); 

     // enum name using name method 
     // enum to String using toString() method 
     for (Currency currency : currencies) { 
       System.out.printf("[ Currency : %s, 
         Value : %s ]%n",currency.name(),currency); 
     } 
    } 
} 

http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html

İlgili konular