gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:21:16 24 4
gpt4 key购买 nike

在我的代码中,我有一个枚举,其中每个值都存储一个单独的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com