Java泛型问题:类型参数E不在其范围内

Java泛型问题:类型参数E不在其范围内,java,generics,Java,Generics,我有一个关于泛型的问题。我有一个根本不编译的方法。编译器告诉我:类型参数E不在其范围内。我通常在理解编译器错误方面没有问题,但这一个是相当棘手的。也许我的泛型知识需要提高。:-)谁能告诉我怎么了 public static <E extends Enum & StringConvertableEnum<E>> Map<String, E> map(Class<E> enumClass) { Map<String, E>

我有一个关于泛型的问题。我有一个根本不编译的方法。编译器告诉我:
类型参数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;
}

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

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

public static <E extends Enum<E> & StringConvertableEnum<E>> Map<String, E> map(Class<E> enumClass) {
公共静态映射(类enumClass){

它抱怨的行号?@bmargies:EnumSet=EnumSet.allOf(enumClass);是行。我不太懂。我觉得你的代码似乎合理。顺便问一下,你为什么需要生成这样的映射?你知道每个enum类都有一个
.valueOf()
静态方法,允许您从其字符串中获取枚举,对吗?i)这将允许您在不使用
getStringValue()
方法的情况下传入枚举,这是必需的。ii)它也不会编译,即使我删除了for循环体中的
getStringValue())
方法被使用。@Kraushauslaus:他的意思是将
E extends Enum
更改为
E extends Enum
:你可以保留你的
StringConvertableEnum
部分。@Kraushauslaus我相信@Yishai的意思是在两个声明中插入
,不要删除任何东西。为我编译。
public static <E extends Enum<E> & StringConvertableEnum<E>> Map<String, E> map(Class<E> enumClass) {