相关疑难解决方法(0)

Java:无法在枚举:初始化错误中使用EnumSet:Tech Research Talent Tree示例

错误:

...
Caused by: java.lang.ExceptionInInitializerError
...
Caused by: java.lang.ClassCastException: 
class com.evopulse.ds2150.TechTrees$BuildingTechTree
not an enum
at java.util.EnumSet.noneOf(Unknown Source)
at java.util.EnumSet.of(Unknown Source)
at com.evopulse.ds2150.TechTrees$BuildingTechTree.<clinit>(TechTrees.java:38)
Run Code Online (Sandbox Code Playgroud)

这是我的枚举的片段

public enum BuildingTechTree {
//Name                      SoftName                    Requirements    
NONE                        ("NULL",                    null),
Run Code Online (Sandbox Code Playgroud)

- >下一行是它崩溃的地方

BARRACKS                    ("Barracks",                EnumSet.of(NONE),
WALLS_SANDBAGS              ("Sandbag wall",            EnumSet.of(NONE),

POWERPLANT                  ("Power plant",             EnumSet.of(BARRACKS)),
GUARDTOWER                  ("Guard Tower",             EnumSet.of(BARRACKS));
Run Code Online (Sandbox Code Playgroud)

用null替换EnumSet.of(NONE)和EnumSet.of(BARRACKS),让初始化工作,但由于缺少数据结构而破坏了我的代码......很明显,但是我做了它来测试我的其余代码不是不知何故原因.

删除EnumSet.of(NONE)并替换为NONE,并且相同的BARRACKS,并更改所有相关变量,构造函数和方法,这些都不起作用......(甚至无法使用contains.all ,因为是"不适用于我改变的变量"...)

我使用第二个实现扩展了这个例子:https: //gamedev.stackexchange.com/a/25652/48573

我也尝试通过逐字复制示例来回溯我的步骤.添加

private static Set<BuildingTechTree> techsKnown;

techsKnown = (BuildingTechTree.BIODOME);
test = TechTrees.researchTech(techsKnown);
Run Code Online (Sandbox Code Playgroud)

到另一个要调用初始化的类.并且不得不改变

public boolean researchTech(BuildingTechTree tech) {
Run Code Online (Sandbox Code Playgroud)

静止的

这导致了相同的"in en enum"错误.我没有任何代表,评论他的答案,指出初始化错误......

添加了当前答案的信息,因为两种解决方案都会导致相同的新错误:

public …
Run Code Online (Sandbox Code Playgroud)

java enums casting initialization

12
推荐指数
2
解决办法
1629
查看次数

标签 统计

casting ×1

enums ×1

initialization ×1

java ×1