java - 如何在 Java 中使用通用枚举类型从类返回枚举

标签 java generics enums

我有一个类,我想在其中使用通用枚举类型,如下所示:

public class PageField<E extends Enum<E>>{
}

似乎我应该能够在该类中有一个 getter 方法,然后可以返回一个枚举 <E>例如,像这样:

public E getSelectedValue() {
    String value = getValueFromElement(this.id);
    return E.valueOf(value);
}

但我不断收到以下错误:

Inferred type 'java.lang.Object' for type parameter 'T' is not within its bound; should extend 'java.lang.Enum'

我做错了什么?这可能吗?

最佳答案

您不能在 E 上调用方法 valueOf:它不是一个对象,它只是一个类型参数。

您应该做的是传递当前枚举类型参数的 Class,以便您可以使用它来检索枚举值:

public class PageField<E extends Enum<E>>{

    private Class<E> enumClass;

    public PageField(Class<E> enumClass) {
        this.enumClass = enumClass;
    }

    public E getSelectedValue() {
        String value = getValueFromElement(this.id);
        return Enum.valueOf(enumClass, value);
    }

}

不幸的是,由于类型删除,无法检索类型 E 的类,因此您需要明确地给出它。

关于java - 如何在 Java 中使用通用枚举类型从类返回枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32354613/

相关文章:

c++ - 如何使用与成员初始值设定项列表一起使用的 static_assert

java - OpenGL 中的立方体渲染怪癖

java - 使用泛型类作为类型参数的上限

java - 在 Linux 上自动转码 H.264 视频

java、泛型和 getAll

java - 如何检查 "multi-object"返回类型

typescript - 如何在运行时获取 TypeScript 枚举类型的名称?

enums - 枚举没有编译时 TypeScript 错误

java - ArrayList 上的错误

java - 尝试在 Xamarin 中绑定(bind) Glide