我有一个使用通用枚举参数化的类,如下所示:
public class SomeClass<E extends Enum<E>> {
public void someMethod( ) {
// I want to initiate a map like this:
Map<E, Long> resultMap = new EnumMap<>(E.class);
//.....
}
}
但是,
EnumMap
构造函数显示以下错误:“无法访问类型参数的类对象”。
在这种情况下初始化 EnumMap 的正确方法是什么?
无法使用
E.class
。您需要以某种方式保存类实例 - 由于类是通用的,实例变量是不错的选择,然后使用实例变量作为参数实例化映射。
public class SomeClass<E extends Enum<E>> {
private final Class<E> clazz;
public SomeClass(Class<E> clazz) {
this.clazz = clazz;
}
public void someMethod() {
Map<E, Long> resultMap = new EnumMap<>(this.clazz);
}
}
您可以创建一个采用
Class<E>
的构造函数,然后使用参数来初始化您的地图,如下所示:
public class SomeClass<E extends Enum<E>> {
private Class<E> enumClass;
public SomeClass(Class<E> enumClass) {
this.enumClass = enumClass;
}
public void someMethod() {
Map<E, Long> resultMap = new EnumMap<>(enumClass);
// .....
}
}
然后你可以像这样使用你的类:
SomeClass<SomeEnum> someObject = new SomeClass<>(SomeEnum.class);
someObject.someMethod();