在泛型类中使用枚举(作为类型)并循环遍历其元素

时间:2014-02-18 13:23:28

标签: java generics enums

我有一个枚举类型为泛型的泛型类,我想迭代枚举中的所有元素。希望以下示例(不工作)将更清楚我想要什么。什么是正确的语法?

public class GenericClass<T extends Enum<T>>{

    T myEnum;

    public void doSomething(){
        for(T element : myEnum.values()){// <-- values() not available
            ....
        }
    }
}

我会这样使用这个类

GenericClass<OtherClass.MyEnumType> manager;
manager.doSomething();

3 个答案:

答案 0 :(得分:2)

您正在尝试保存对枚举的实例的引用,这个引用不是很有用,但您可以要求将枚举类传递给构造函数(称为类型令牌)。

使用类,您可以使用(类型化)类方法getEnumConstants()(如果类不是枚举类,则返回null,但我们将它绑定为枚举类)。

编译:

public class GenericClass<T extends Enum<T>> {

    Class<T> enumClass;

    public GenericClass(Class<T> enumClass) {
        this.enumClass = enumClass;
    }

    public void doSomething() {
        for (T element : enumClass.getEnumConstants()) {

        }
    }
}

答案 1 :(得分:1)

不太可能。 values()方法不是Enum类的一部分,而是编译器从枚举中派生的类:public class YourEnum extends Enum<YourEnum>

有关详细信息,请参阅此SO问题:How is values() implemented for Java 6 enums?

答案 2 :(得分:1)

这相当于静态values()方法:

T[] items = myEnum.getDeclaringClass().getEnumConstants();

请参阅Enum.getDeclaringClass()

(基本上这会返回定义枚举项的类,可能是也可能不是== myEnum.getClass(),具体取决于枚举项是否有正文)