gpt4 book ai didi

Java:获取枚举的 ExceptionInInitializerError

转载 作者:行者123 更新时间:2023-11-30 03:37:46 25 4
gpt4 key购买 nike

编辑:已解决,但我不明白为什么

在 PokemonEnum 中我有这行

private PokemonEnum[ ] pokemon = PokemonEnum.values(); 

我把它改为:

private static PokemonEnum[ ] pokemon = PokemonEnum.values(); 

现在可以了。我什至从未使用过该数组,所以我不知道为什么我会收到错误或为什么静态修复它。

<小时/>

我还没有真正使用过枚举,所以我真的不知道为什么当我运行 main 时会收到 ExceptionInInitializerError (当我尝试创建一个新的 Pokemon 时在第 28 行)。有人愿意解释一下吗?谢谢。

import java.awt.image.BufferedImage;
import java.util.ArrayList;


public class Pokemon {

private PokemonEnum name;
private int dexNumber;
private BufferedImage sprite;
private TypeEnum[] types = new TypeEnum[1];
private ArrayList<AbilityEnum> abilities;
private ArrayList<MoveEnum> moves;
private short hp;
private short attack;
private short defense;
private short special_attack;
private short special_defense;
private short speed;

public Pokemon(PokemonEnum name)
{
this.name = name;
this.dexNumber = name.getDexNum();
}

public static void main(String[] args)
{
Pokemon pikachu = new Pokemon(PokemonEnum.Pikachu);
System.out.println(pikachu.dexNumber);
}
}



public enum PokemonEnum {
Pikachu;

public int getDexNum()
{
return ordinal()+1;
}

private PokemonEnum[ ] pokemon = PokemonEnum.values();
}


Stack Trace:

Exception in thread "main" java.lang.ExceptionInInitializerError
at Pokemon.main(Pokemon.java:28)
Caused by: java.lang.NullPointerException
at PokemonEnum.values(PokemonEnum.java:1)
at PokemonEnum.<init>(PokemonEnum.java:722)
at PokemonEnum.<clinit>(PokemonEnum.java:2)
... 1 more

最佳答案

您所经历的“就像”递归。

出现此错误的原因是代码 PokemonEnum.values() 位于枚举 PokemonEnum 中,并且在编译时会读取 values()然后使用这个内部函数,原始数据类型 enum 引用自身。然而,由于 enum 仍在编译中,value() 的值为 null

注意:尝试在其枚举内部使用value()将导致错误。这样,由于 values()<,尝试使用 if(PokemonEnum.values()!=null) 甚至 try catch ExceptionInInitializerError 将不起作用 是原始类型的一部分(意味着被调用的方法是 native )。

解决方案是将private PokemonEnum[] pokemon = PokemonEnum.values();放置在枚举PokemonEnum的外部和下方。

我从个人经验以及类似问题的其他来源了解到这一点。

类似来源:herehere

希望这有帮助。

关于Java:获取枚举的 ExceptionInInitializerError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27432265/

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