鉴于以下课程:
...
Class<? extends Enum<?>> enumType;
public MyClass(Class<? extends Enum<?>> enumType) {
super();
this.enumType=enumType;
...
如何定义返回“enumType”类的枚举的方法?
我需要类似的东西:
public enumType getValue(){
...
}
,但这不起作用..
答案 0 :(得分:7)
使用类型参数而不是通配符。例如:
class MyClass<T extends Enum<T>> {
private Class<T> enumType;
public MyClass(Class<T> enumType) {
this.enumType = enumType;
}
public T getValue() {
// ...
}
}
编辑为了回应您的评论,这里列出了一个列出任意enum
的所有常量的方法:
public <E extends Enum<E>> void showEnumValues(Class<E> e) {
for (E value : e.getEnumConstants())
System.out.println(value);
}
}
答案 1 :(得分:3)
您必须在通用内部实际指定变量,而不仅仅是在任何地方使用通配符。那就是这样的:
public class MyClass<E extends EnumType<E>> {
Class<E> enumType;
E value;
public MyClass(Class<E> enumType) {
this.enumType = enumType;
}
public E getValue() {
return value;
}
}