Java Enums: List enumerated values from a Class<? extends Enum>

JavaEnums

Java Problem Overview


I've got the class object for an enum (I have 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.

Java Solutions


Solution 1 - Java

Solution 2 - Java

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();

Solution 3 - Java

using reflection is simple as calling Class#getEnumConstants():

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

Solution 4 - Java

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLandon KuhnView Question on Stackoverflow
Solution 1 - JavaTom Hawtin - tacklineView Answer on Stackoverflow
Solution 2 - JavaYishaiView Answer on Stackoverflow
Solution 3 - JavadfaView Answer on Stackoverflow
Solution 4 - JavaMagnilexView Answer on Stackoverflow