如何创建循环枚举定义?



我正在尝试创建这两个枚举类

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

最新更新