java不兼容类型T无法转换为Enum

标签 java generics

代码在 eclipse 中运行良好,但在 intellij IDEA 中尝试编译时出现以下错误

public class Sample{
   private Map<Class<Enum>, IConverter<? extends Enum<?>>> enumConverter = Maps.newHashMap();


public <T extends Enum<T>> T  getEnumAttribute(String key, final Class<T> ee){
    IConverter<T> e = (IConverter<T>)enumConverters.get(ee);
    if ( e == null ){
        e = new IConverter<T>() {
            @Override
            public String toString(T val) {
                return val.toString();
            }

            @Override
            public Class<T> getType() {
                return ee;
            }

            @Override
            public T fromString(String val) {
                return Enum.valueOf(ee, val);
            }
        };
        enumConverters.put((Class<Enum>) ee, e);
    }
    return getAttribute(key, e);
}

public static interface IConverter<T> extends Serializable{
    public  T fromString(String val);
    public String toString(T val);
    public Class<T> getType();
}     


}

代码在 Eclipse 中编译正常,但在

中抛出错误

enumConverters.put((Class<Enum>) ee, e);行为

Error:(521, 66) java: incompatible types: java.lang.Class<T> cannot be converted to java.lang.Class<java.lang.Enum>

我不确定出了什么问题,任何帮助将不胜感激。

最佳答案

一个Class<T extends Enum<T>>不是Class<Enum> ,就像 Class<String>不是Class<Object> ,或List<T>不是List<Object> .

将您的 map 声明更改为:

private Map<Class<? extends Enum<?>>, IConverter<? extends Enum<?>>> enumConverter = Maps.newHashMap();

关于java不兼容类型T无法转换为Enum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50473570/

相关文章:

java - 一种在运行时查找另一个对象(其中包含列表)的所有子对象的方法

java - java中的泛型方法可以限制可接受的类型吗?

java - 循环链表泛型

java - 刽子手错误的猜测无法正确打印

java - 动态创建 Logback Loggers 和 Appenders

java - 使用封闭的通用类的方法返回类型?

postgresql - Slick 2.0 通用 CRUD 操作

java - 在不重启服务器的情况下部署到 tomcat7

java - 在c#的抽象类中转换带有静态字段的java接口(interface)是最好的选择吗?

java - 找到重复的主键时替换行