代码在 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/