1
public enum FOO{
    TATA(TOTO,TITI);

    public FOO(BAR bar1,BAR bar2) {
        bar1.associate(this,bar2);
    }
}

public enum BAR {
    TOTO,
    TITI;

    private FOO _foo;
    private BAR _bar;

    public void associate(FOO foo,BAR bar) {
        _foo = foo;
        _bar = bar;
    }
}

问题是在我的代码中我在 FOO 之前调用了 BAR。结果是 BAR 中的字段为空。我终于找到了原因。(枚举仅在第一次调用时被实例化)。为了解决这个问题,我FOO.TATA;在特定文件中使用 Bar 之前添加了该问题。

所以我的问题是,有没有更优雅的方法来确保一个枚举在另一个枚举之前实例化?

4

1 回答 1

2

由于它们彼此密切相关,我会将它们放在同一个类中,这将起到调解人的作用:

public class FooBar {
    static {
        Bar.TOTO.associate(Foo.TATA, Bar.TITI);
    }

    public enum Foo {
        TATA;
    }

    public enum Bar {
        TOTO,
        TITI;

        private Foo _foo;
        private Bar _bar;

        private void associate(Foo foo, Bar bar) {
            _foo = foo;
            _bar = bar;
        }

        public Foo getFoo() {
            return _foo;
        }

        public Bar getBar() {
            return _bar;
        }
    }

    public static void main(String[] args) {
        System.out.println(FooBar.Bar.TITI.getFoo());
        System.out.println(FooBar.Bar.TITI.getBar());
        System.out.println(FooBar.Bar.TOTO.getFoo());
        System.out.println(FooBar.Bar.TOTO.getBar());
    } 
}
于 2012-05-29T16:52:54.157 回答