Java Enums: List enumerated values from a Class<? extends Enum>
I've got the class object for an enum (I ha开发者_JS百科ve a Class<? extends Enum>
) and I need to get a list of the enumerated values represented by this enum. The values
static function has what I need, but I'm not sure how to get access to it from the class object.
Class.getEnumConstants
If you know the name of the value you need:
Class<? extends Enum> klass = ...
Enum<?> x = Enum.valueOf(klass, "NAME");
If you don't, you can get an array of them by (as Tom got to first):
klass.getEnumConstants();
I am suprised to see that EnumSet#allOf()
is not mentioned:
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
Creates an enum set containing all of the elements in the specified element type.
Consider the following enum
:
enum MyEnum {
TEST1, TEST2
}
Simply call the method like this:
Set<MyEnum> allElementsInMyEnum = EnumSet.allOf(MyEnum.class);
Of course, this returns a Set
, not a List
, but it should be enough in many (most?) use cases.
Or, if you have an unknown enum
:
Class<? extends Enum> enumClass = MyEnum.class;
Set<? extends Enum> allElementsInMyEnum = EnumSet.allOf(enumClass);
The advantage of this method, compared to Class#getEnumConstants()
, is that it is typed so that it is not possible to pass anything other than an enum
to it. For example, the below code is valid and returns null
:
String.class.getEnumConstants();
While this won't compile:
EnumSet.allOf(String.class); // won't compile
using reflection is simple as calling Class#getEnumConstants():
List<Enum<?>> enum2list(Class<? extends Enum<?>> cls) {
return Arrays.asList(cls.getEnumConstants());
}
精彩评论