Pass in Any Enum into Method

1.8k Views Asked by At

I am writing in Java and trying to create a method that will take any Enum class that I pass to it, as described here (mostly): Java: Generic method for Enums

I am getting a problem when I try to pass an enum into this type of method. It wants me to change the method to take a specific Enum class. Does anyone know what I am doing wrong?

Here is my version of the method:

public Class Presenter{
public static <E extends Enum<E>> List<String> getEnumString(Class<E> eClass){
    List<String> returnList = new ArrayList<String>();

    for (E en: EnumSet.allOf(eClass)){
        returnList.add(en.name());
}
    return returnList;
}
}

and here is what I am attempting to pass in. The error is saying that the argument is not applicable, and it suggests changing the method above to only take MyEnumClass:

MyEnumClass eclass;

List<STtring> string = presenter.getEnumString(eclass);

I thank anyone who can help in advance.

Thanks!

-Eli

1

There are 1 best solutions below

1
On BEST ANSWER
MyEnumClass eclass;

eClass is a reference to a MyEnumClass object. What you need to pass into your function is the class type itself. The syntax is:

MyEnumClass.class

The following code will do what you want. Notice I pass in MyEnumClass.class, not a variable.

import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;

public enum MyEnumClass
{
    ENUM_1, ENUM_2, ENUM_3, ENUM_4, ENUM_5;

    public static void main(String[] args)
    {
        for (String string : getEnumString(MyEnumClass.class))
            System.out.println(string);
    }

    public static <E extends Enum<E>> List<String>
            getEnumString(Class<E> eClass)
    {
        List<String> returnList = new ArrayList<String>();

        for (E en : EnumSet.allOf(eClass))
        {
            returnList.add(en.name());
        }

        return returnList;
    }
}

Output:

ENUM_1
ENUM_2
ENUM_3
ENUM_4
ENUM_5