在我的代码中,我有一个枚举,其中每个值都存储一个单独的 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;
}
为什么会发生此错误,我该如何解决?