Java 泛型问题 : type parameter E is not within its bound

标签 java generics

我有一个关于泛型的问题。我有这种根本无法编译的方法。编译器告诉我:类型参数 E 不在其范围内。我在理解编译器错误方面通常没有问题,但这个错误非常棘手。也许我对泛型的了解需要提高。 :-) 谁能告诉我哪里出了问题?

public static <E extends Enum & StringConvertableEnum<E>> Map<String, E> map(Class<E> enumClass) {
    Map<String, E> mapping = new HashMap<String, E>();

    EnumSet<E> set = EnumSet.allOf(enumClass);

    for(E enumConstant : set) {
        mapping.put(enumConstant.getStringValue(), enumConstant);
    }

    return mapping;
}

这是 StringConvertableEnum 的定义:

public interface StringConvertableEnum<E extends Enum> {
    public E getEnumFromStringValue(String string);
    public String getStringValue();
}

最佳答案

您需要将声明更改为 E extends Enum<E>

编辑,抱歉不得不离开,我的意思是完整声明:

public static <E extends Enum<E> & StringConvertableEnum<E>> Map<String, E> map(Class<E> enumClass) {

关于Java 泛型问题 : type parameter E is not within its bound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4775365/

相关文章:

c# - 对泛型类型的构造函数约束或只是检查我的泛型类型构造函数中的约束?

java - 创建一个静态字段,它是使用泛型和通配符的嵌套列表

java - 错误 HTTP : 500 when uploading/sharing file in openmeetings

java - 将属性传递给 Maven 子模块,该子模块没有当前模块作为父模块

java - FFmpeg 从视频中提取 MP3 时出错

java - Robospice 存储对象,通过 Ormlite 在数据库中扩展 ArrayList

java - 当由 FXMLLoader 初始化时,如何重写控件的方法?

java - 类型参数不在其范围内

c# - 从 C# 类型变量初始化通用变量

c# - 是否有更通用的方法来执行此类行为?