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
inは、異なるEnum タイプを持ついくつかの種類のEnumSetMyClass
を格納するために使用されます。相対メソッドを実装しているときに、次のようにメソッドを呼び出そうとすると、いくつかの問題が発生します。
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>)
この問題に対処するには?raw typeまたはtype eraserに由来する可能性があると思いますが、主な理由はわかりません。ありがとう。