方法从类变量返回类型

时间:2013-10-31 13:50:42

标签: java generics wildcard

鉴于以下课程:

  ...

  Class<? extends Enum<?>> enumType;

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

    this.enumType=enumType;

  ...

如何定义返回“enumType”类的枚举的方法?

我需要类似的东西:

public enumType getValue(){
  ...
}

,但这不起作用..

2 个答案:

答案 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;
    }
}