2009-10-26 17 views
49

Enum için sınıf nesnesine sahibim (bir Class<? extends Enum> var) ve bu numara tarafından temsil edilen numaraların bir listesini almam gerekiyor. values statik işlevi ihtiyacım olan şeylere sahiptir, ancak sınıf nesnesinden ona nasıl erişileceğinden emin değilim.Java Enümleri: Bir Sınıfın <sayılarını listeleyiniz <? Enum>

+0

onun statik - yansıma. – IAdapter

+0

'Class' bir yansıma nesnesidir (paketi önler). –

cevap

10

Class#getEnumConstants() arayarak olarak basittir yansıma kullanarak:

List<Enum> enum2list(Class<? extends Enum> cls) { 
    return Arrays.asList(cls.getEnumConstants()); 
} 
16

İhtiyacınız değerin adını biliyorsanız: Bunu yapmazsanız

 Class<? extends Enum> klass = ... 
    Enum<?> x = Enum.valueOf(klass, "NAME"); 

, bunlardan bir dizi (ilk Tom var) ile alabilirsiniz:

 klass.getEnumConstants(); 
3

Ben EnumSet#allOf() sözü olmadığını görmek için Im'sürpriz:

public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)

belirtilen eleman tipinde tüm unsurları içeren bir enum kümesi oluşturur.

enum aşağıdaki düşünün:

enum MyEnum { 
    TEST1, TEST2 
} 

Basitçe şöyle yöntemi çağırır: Elbette

Set<MyEnum> allElementsInMyEnum = EnumSet.allOf(MyEnum.class); 

, bu Set değil, bir List verir, ancak bunu yeterli olmalıdır çok (çoğu?) kullanım durumları.

Veya, varsa bir enum bilinmiyor:

Class<? extends Enum> enumClass = MyEnum.class; 
Set<? extends Enum> allElementsInMyEnum = EnumSet.allOf(enumClass); 

Class#getEnumConstants() kıyasla Bu yöntemin avantajı, bunun bir enum dışında başka bir şey geçmesi mümkün değildir böylece yazmış olmasıdır

. Örneğin, aşağıdaki kod geçerlidir ve null verir:

String.class.getEnumConstants(); 

bu derleme etmeyecek olsa:

EnumSet.allOf(String.class); // won't compile 
İlgili konular