我在Java中创建了enum
,其中enum
的每个元素引用了另一个enum
。我还实现了一个getter,它将返回引用的实例。我会说,没有什么奇怪或错误的。与通常的enum
实现的唯一区别是使用另一个enum
作为支持值。我不使用int
或任何其他原始类型。
然后我尝试以相同的方式实现其他enum
并使用第一个enum
作为其元素的支持值。代码编译得很好,在我几次调用getter之前没有任何错误。
在下面的JUnit测试中自行查看。断言在最后一行失败。
为什么会失败?
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
enum EN {
DOG(CS.PES),
CAT(CS.KOCKA);
CS v;
EN(CS v) {
this.v = v;
}
public CS getCS() {
return this.v;
}
}
enum CS {
PES(EN.DOG),
KOCKA(EN.CAT);
EN v;
CS(EN v) {
this.v = v;
}
public EN getEN() {
return this.v;
}
}
public class EnumTest {
@Test
public void testValueOfEnum() {
String zvire = "PES";
CS pes = CS.valueOf(zvire);
assertNotNull(pes);
assertNotNull(pes.getEN()); // OK
assertNotNull(pes.getEN().getCS()); // FAIL -- getCS() is null
}
}