0

Given the following class:

  ...

  Class<? extends Enum<?>> enumType;

  public MyClass(Class<? extends Enum<?>> enumType) {
    super();

    this.enumType=enumType;

  ...

How do i define a method that returns an Enum of the "enumType" class?

I need something like:

public enumType getValue(){
  ...
}

,but this doesn't work ..

4

2 回答 2

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);
    }
}
于 2013-10-31T13:54:29.197 回答
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;
    }
}
于 2013-10-31T13:55:42.573 回答