public enum MyEnum1 {
FOO(BAR), BAR(FOO);
private MyEnum1 other;
private MyEnum1(MyEnum1 other) {
this.other = other;
}
public MyEnum1 getOther() {
return other;
}
}
MyEnum1
生成错误Cannot reference a field before it is defined
,这很容易理解,因为声明顺序在这里很重要。但是,为什么以下内容会编译?public enum MyEnum2 {
FOO { public MyEnum2 getOther() { return BAR; } },
BAR { public MyEnum2 getOther() { return FOO; } };
public abstract MyEnum2 getOther();
}
FOO
在定义BAR
之前指的是BAR
,我错了吗? 最佳答案
FOO { public MyEnum2 getOther() { return BAR; } },
BAR { public MyEnum2 getOther() { return FOO; } };
您正在创建两个扩展了
MyEnum2
的匿名类。当您最终调用
BAR
或其他代码执行Foo.getOther()
时最终引用了MyEnum2.Bar
时,类型将被初始化。关于java - 看来我可以*在定义字段之前先对其进行引用*,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18382046/