具有泛型的静态工厂方法

时间:2010-07-23 09:55:19

标签: java generics

我有一个类EnumConverter<T extends Enum<?>>,它将字符串转换为枚举T的正确枚举常量(我不能使用Enum.valueOf)。我在这样的工厂方法中构造了这个类的实例:

public static <T extends Enum<?>> EnumConverter<T> getInstance(Class<T> enumClass) {
    return new EnumConverter<T>(enumClass.getEnumConstants());
}

这有效,但现在我要缓存EnumConverter个实例,以确保每个枚举只有一个,即Map,我的问题是如何声明Map 。我最接近的是:

private static final Map<Class<?>, EnumConverter<? extends Enum<?>>>

但如果我尝试从我的工厂方法返回此Map中的值,则会出错:

  

Type mismatch: cannot convert from EnumConverter<capture#1-of ? extends Enum<?>> to EnumConverter<T>

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

由于您希望在地图中存储不同的子类型,编译器无法知道您接收的是哪个实际子类型。我想你必须添加一个演员:

public static <T extends Enum<?>> EnumConverter<T> getInstance(Class<T> enumClass) {
    return (EnumConverter<T>) cache.get(enumClass);
}