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

时间:2018-05-22 17:38:14

标签: 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>

我不确定有什么问题,我们将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

Class<T extends Enum<T>>不是Class<Enum>,正如Class<String>不是Class<Object>,或List<T>不是List<Object> }}

将地图声明更改为:

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