2011-01-24 53 views
4

我需要从枚举中获取所有值,其类型仅在运行时才知道。我想出了以下内容,但想知道有没有人知道更好的方法:从运行时已知的枚举中获取值

enum TestEnum { 
    FOO, 
    BAR 
} 

Enum[] getValuesForEnum(Class type) { 
    try { 
    Method m = type.getMethod("values"); 
    return (Enum[])m.invoke(null); 
    } catch (Exception e) { 
    throw new RuntimeException(e); 
    } 
} 

Class testEnum = Class.forName("TestEnum"); 
getValuesForEnum(testEnum); 

谢谢!

+0

谢谢大家,我错过了API! – Scruffers 2011-01-24 15:18:48

回答

16

使用代替可用的API:

T[] getValuesForEnum(Class<T> type) { 
    return type.getEnumConstants(); 
} 

the Javadoc

返回枚举类或空的元素,如果这类对象不表示枚举类型。

请注意,我已将您的方法转换为泛型,以使它变为类型安全。这样您就不需要向下转换来从返回的数组中获取实际的枚举值。 (当然,这使得该方法那么微不足道,你可以忽略它,并呼吁type.getEnumConstants()直接:-)

5

我使用type.getEnumConstants()。

3

我想这样的作品:

Enum<?>[] getValuesForEnum(Class<Enum<?>> enumType) { 
    return enumType.getEnumConstants(); 
} 
+0

在编译时尝试确保类型安全的好主意。虽然,恐怕需要向下转换才能访问返回的枚举值。 – 2011-01-24 15:22:21

8

下面是保留类型的Kevin Stembridge's answer变体(避免向下转型),同时还防范被称为非枚举类型:

static <E extends Enum<E>> E[] getValuesForEnum(Class<E> clazz) { 
    return clazz.getEnumConstants(); 
}