代码之家  ›  专栏  ›  技术社区  ›  Ashish

Java不兼容类型T不能转换为枚举

  •  1
  • Ashish  · 技术社区  · 7 年前

    代码在Eclipse中运行良好,但在尝试用Intellij思想编译时出现以下错误

    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 回复  |  直到 7 年前
        1
  •  2
  •   Andy Turner    7 年前

    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();