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,我错了吗?

最佳答案

JLS的重要部分是thisthis







所以用

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/

10-14 21:13
查看更多