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 {
// ...
};
member
中的MyClass
用于存储几种具有不同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);
}
出现错误:
类型为
putEnumSet(Class<E>, E)
的方法MyClass<Word>
不适用于参数(Class<capture#1-of ? extends EnumSet>, EnumSet<Category>)
如何解决这个问题?我认为这可能来自原始类型或类型擦除,但我不知道主要原因。谢谢。
最佳答案
如何解决这个问题?
E extends EnumSet<E>
这非常令人困惑,因为它说您必须具有必须扩展
E
的元素EnumSet<E>
,即您需要的元素类型本身就是EnumSet
的E
您有一个问题,所有EnumSet类在运行时都相同。即只有一个EnumSet.class。最好记录一下元素的类。
public class MyClass {
private Map<Class, Set> member;
public <E> void putEnumSet(Class<E> elementType, Set<E> enumSet) {
this.member.put(elementType, enumSet);
}
public <E> Set<E> getEnumSet(Class<E> elementType) {
return (Set<E>) this.member.get(elementType));
}
};
关于java - 在Java中对Map <Class <?>,Object>进行操作时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27675335/