我正在尝试创建这两个枚举类
import static B.B1;
public enum A {
A1(B1);
private A(B b) {
System.out.println(b);
}
}
import static A.A1;
public enum B {
B1(A1);
private B(A a) {
System.out.println(a);
}
}
但是当我运行这段代码时
public class Main {
public static void main(String[] args) {
A1.ordinal();
}
}
我得到以下输出
null
B1
而不是
A1
B1
如何解决这个问题?
您无法在构造函数中解决此问题。这是类初始化方式的一个基本限制:如果一个类在初始化期间循环引用自身,它会看到类的当前状态,这可能意味着final
字段可以被观察到是null
的,即使你以后可以看到它们为非空。
相反,您可以在枚举上有一个方法来获取"其他":
public enum A {
A1;
B other() { return B.B1; }
}
public enum B {
B1;
A other() { return A.A1; }
}
现在,A1.other()
会给你B1
;B1.other()
会给你A1
。