java枚举种方法调用_Java枚举:两种枚举类型,每种包含彼此的引用?

有没有一种方法可以解决由两个互相引用的枚举引起的类加载问题?

我有两组枚举Foo和Bar,它们的定义如下:

public class EnumTest {

public enum Foo {

A(Bar.Alpha),

B(Bar.Delta),

C(Bar.Alpha);

private Foo(Bar b) {

this.b = b;

}

public final Bar b;

}

public enum Bar {

Alpha(Foo.A),

Beta(Foo.C),

Delta(Foo.C);

private Bar(Foo f) {

this.f = f;

}

public final Foo f;

}

public static void main (String[] args) {

for (Foo f: Foo.values()) {

System.out.println(f + " bar " + f.b);

}

for (Bar b: Bar.values()) {

System.out.println(b + " foo " + b.f);

}

}

}

上面的代码作为输出产生:

A bar Alpha

B bar Delta

C bar Alpha

Alpha foo null

Beta foo null

Delta foo null

我知道为什么会发生-

JVM开始对Foo进行类加载;它在Foo.A的构造函数中看到Bar.Alpha,因此开始加载Bar。它在对Bar.Alpha的构造函数的调用中看到Foo.A引用,但是(因为我们仍然在Foo.A的构造函数中)Foo.A此时为null,因此Bar.Alpha的构造函数传递了null。如果我反转两个for循环(或在Foo之前​​引用Bar),则输出将更改,以使Bar的值都正确,而Foo的值则不正确。

有什么办法可以解决这个问题?我知道我可以在第3类中创建一个静态地图和一个静态地图,但是这对我来说确实有点不足。我还可以使Foo.getBar()和Bar.getFoo()方法引用外部地图,因此它甚至都不会更改我的界面(我使用的实际类是检查器,而不是公共字段),但仍然感觉对我来说有点不干净

(我在实际系统中执行此操作的原因:Foo和Bar表示2个应用相互发送的消息的类型; Foo.b和Bar.f字段表示给定消息的预期响应类型-

所以在我的系统中示例代码,当app_1收到Foo.A时,需要使用Bar.Alpha进行回复,反之亦然。)

提前致谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值