Java:无法在枚举中使用枚举集:初始化错误:技术研究人才树示例
错误:
...
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)
这是我的枚举的一个片段
public enum BuildingTechTree {
//Name SoftName Requirements
NONE ("NULL", null),
--> 下一行是它崩溃的地方
BARRACKS ("Barracks", EnumSet.of(NONE),
WALLS_SANDBAGS ("Sandbag wall", EnumSet.of(NONE),
POWERPLANT ("Power plant", EnumSet.of(BARRACKS)),
GUARDTOWER ("Guard Tower", EnumSet.of(BARRACKS));
将EnumSet.of(NONE)和EnumSet.of(BARRACKS)替换为null,让初始化工作,但由于缺少数据结构,因此会破坏我的代码...显然,但我这样做是为了测试我的代码的其余部分,这并不是某种原因。
删除EnumSet.of(NONE)并仅替换为NONE,对于BARRACKS也是如此,并更改所有相关的变量,构造函数和方法,这也不起作用...(甚至不能使用 contains.all,因为 is 不 “适用于我更改的变量”...
我扩展了这个例子,使用了第二个实现:https://gamedev.stackexchange.com/a/25652/48573
我还尝试通过逐字复制示例来回溯我的步骤。添加
private static Set<BuildingTechTree> techsKnown;
techsKnown = (BuildingTechTree.BIODOME);
test = TechTrees.researchTech(techsKnown);
添加到要从中调用以测试初始化的另一个类。不得不改变
public boolean researchTech(BuildingTechTree tech) {
到静态
这导致了相同的“不是枚举”错误。我没有任何代表,评论他的答案以指出初始化错误...
添加了两个当前答案的信息,因为两个解决方案都会导致相同的新错误:
public class TechTrees {
private static Set<BuildingTechTree> techsKnown;
public TechTrees() {
techsKnown = EnumSet.of(BuildingTechTree.NONE); //Using this
techsKnown = EnumSet.noneOf(BuildingTechTree.class); //Or this
}
public static boolean researchTech(BuildingTechTree tech) {
if (techsKnown.containsAll(tech.requirements)) { //Causes null pointer
return true; //exception @ techsKnown
}
return false;
}