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

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美元.您需要以某种方式保存类实例-因为类是泛型的,所以实例变量是很好的 Select ,然后使用实例变量作为参数实例化映射.

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

Java相关问答推荐

日食IDE 2024-03在Ubuntu下崩溃,导致hr_err_pid.log

Select 按位运算序列

基本时态运算的ISO-8601周数据表示法

使用传递的参数构造异常的Mockito-doThrow(或thenThrow)

蒙蒂霍尔比赛结果不正确

解释左移在Java中的工作原理

使用UTC时区将startDatetime转换为本地时间

如何让JavaFx应用程序识别依赖项?

尽管通过中断请求线程死亡,但线程仍将继续存在

使用Class.this.field=Value初始化构造函数中的最后一个字段会产生错误,而使用this.field=Value则不会

Oj算法 MatrixR032从字符串、归一化和余弦相似度计算创建

是否有一个Java Future实现可以在池繁忙时在调用者线程中执行?

Quarkus:运行时出现EnumConstantNotPresentException

在ECLIPSE上的M1 Pro上运行JavaFX的问题

如何使用Java对随机生成的字母数字优惠券代码进行过期设置

活泼的一次判断成语,结果中等

在具有Quarkus Panache的PostgreSQL中将JSON数据存储为JSONB时,会将其存储为转义字符串

原始和参数化之间的差异调用orElseGet时可选(供应商)

Springboot应用程序无法识别任何@RestController或@Service,我认为@Repository也无法识别

具有 DayOfWeek 列表的 JPA 实体