从通用枚举创建 EnumMap

问题描述 投票:0回答:2

我有一个使用通用枚举参数化的类,如下所示:

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 的正确方法是什么?

java generics enums enum-map
2个回答
0
投票

无法使用

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);
  }
}

0
投票

您可以创建一个采用

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();
© www.soinside.com 2019 - 2024. All rights reserved.