我有一个枚举类型为泛型的泛型类,我想迭代枚举中的所有元素。希望以下示例(不工作)将更清楚我想要什么。什么是正确的语法?
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();
答案 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();
(基本上这会返回定义枚举项的类,可能是也可能不是== myEnum.getClass(),具体取决于枚举项是否有正文)