作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:已解决,但我不明白为什么
在 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
的外部和下方。
我从个人经验以及类似问题的其他来源了解到这一点。
希望这有帮助。
关于Java:获取枚举的 ExceptionInInitializerError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27432265/
我是一名优秀的程序员,十分优秀!