【发布时间】:2014-12-28 09:52:51
【问题描述】:
public class MyClass<T> {
private Map<Class<?>, Object> member;
public <E> void putEnumSet(Class<E> enumSetType, E enumSet) {
this.member.put(enumSetType, enumSetType.cast(enumSet));
}
public <E> E getEnumSet(Class<E> enumType) {
return enumType.cast(this.member.get(enumType));
}
};
public enum Category {
// ...
};
MyClass中的member用于存储不同Enum类型的几种EnumSet。在实现相关方法时,我遇到了一些问题:当我尝试这样调用方法时:
public static void main(String[] args) {
EnumSet<Category> set = EnumSet.noneOf(Category.class);
MyClass<Word> newClass = new MyClass<Word>();
newClass.putEnumSet(set.getClass(), set);
}
错误来了:
MyClass<Word>类型中的方法putEnumSet(Class<E>, E)不适用于参数(Class<capture#1-of ? extends EnumSet>, EnumSet<Category>)
如何处理这个问题?我认为它可能来自原始类型或类型擦除,但我不知道主要原因。谢谢。
【问题讨论】:
标签: java generics type-erasure raw-types enumset