java - 无法在被映射的枚举的初始值设定项内构造 EnumMap

标签 java enums enum-map

在我的代码中,我有一个枚举,其中每个值都存储一个单独的 EnumMap。但是,当我尝试使用以下代码在构造函数或初始化程序中初始化 EnumMap 时:

public static void main(String[] args) {
   RPS.values(); // forces initialization of enum values
}

enum RPS {
   ROCK,
   PAPER,
   SCISSORS;
   EnumMap<RPS,Boolean> matchups;
   {
      matchups = new EnumMap<>(RPS.class);
   }
}

它抛出由 NullPointerException 引起的 ExceptionInInitializerError。 但是,当我在构造函数外部初始化它时,不会引发错误,如以下代码所示:

public static void main(String[] args) {
   for (RPS val:RPS.values())
      val.matchups = new EnumMap<>(RPS.class);
}

enum RPS {
   ROCK,
   PAPER,
   SCISSORS;
   EnumMap<RPS,Boolean> matchups;
}

为什么会出现此错误以及如何修复它?

最佳答案

只需将初始化移动到静态 block ,因为 RPS 枚举值由那时决定:

enum RPS {
   ROCK,
   PAPER,
   SCISSORS;

   EnumMap<RPS,Boolean> matchups;
   static
   {
        for (RPS val:RPS.values())
            val.matchups = new EnumMap<>(RPS.class);
   }
}

关于java - 无法在被映射的枚举的初始值设定项内构造 EnumMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62268910/

相关文章:

java - 使用 java 枚举实现位域

Java 8 : Transform EnumMap<ExampleEnum, 字符串> 到映射<字符串,对象>

java - 如何打印HiveMQ客户端中的所有主题? (MQTT)

c++ - "Where"这个重载运算符是否接受 "out"?

jsp - 用于检查集合是否包含特定 Enum 值的 EL 语法

java - 将原始值存储在 EnumMap 中

Java EnumMap 参数混淆

java - 构建路径中的必需项目 [Eclipse]

java - 使用EasyMock很好地实现了单元测试

java - 刷新通用图像加载器缓存