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>,即您需要的元素类型本身就是EnumSetE



您有一个问题,所有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/

10-10 09:24