java - 无法在被映射的枚举的初始化程序中构造 EnumMap
问题描述
在我的代码中,我有一个枚举,其中每个值都存储一个单独的 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;
}
为什么会发生此错误,我该如何解决?
解决方案
只需将您的初始化移动到静态块,因为 RPS 枚举值由那时确定:
enum RPS {
ROCK,
PAPER,
SCISSORS;
EnumMap<RPS,Boolean> matchups;
static
{
for (RPS val:RPS.values())
val.matchups = new EnumMap<>(RPS.class);
}
}
推荐阅读
- git - Git 服务器恢复丢失 30 天从本地 repo 恢复提交
- c++ - 将 carray 转换为 istream 的 initializer_list
- kotlin - 如何通过反射访问和更改 kotlin 中对象内的对象成员的字段值?
- r - 使用正则表达式更改列表中数据框的元素名称
- python-3.x - df.to_excel 仅捕获迭代 pandas 的最后一个请求
- amazon-web-services - AWS EC2 中的 JSF Websocket 在 localhost 但不在 EC2 (AWS) 上工作
- python-3.x - 当测试结束时并非所有任务都停止时,Asyncio 单元测试将失败
- python - Visual Code Studio 不允许我运行 discord.py 文件
- git - Git - 以下未跟踪的工作树文件将被合并覆盖:
- python - 如何执行二维神经网络?