枚举:“非法前向引用”的一致性

时间:2015-07-01 16:07:50

标签: java constructor enums arguments

当调用具有相同类的常量的枚举构造函数时,编译器需要其限定名称,如下例所示:

enum Animal
{
    CAT     (MAMMAL),           // this notation doesn't compile
    LIZARD  (Animal.REPTILE),   // this one does
    DOG     (Animal.MAMMAL);

    private static final int MAMMAL  = 0;
    private static final int REPTILE = 1;

    private int family;

    Animal(int family)
    {
        this.family = family;
    }
}

不遵守会产生illegal forward reference:编译器认为MAMMAL是此枚举的一个实例,但此时尚未声明(如DOG)而不是常量;鉴于没有构造函数接受Animal类型的参数,这是荒谬的。

为什么编译器只有在使用语法MAMMAL时才会检查Animal是常量还是Animal.MAMMAL的实例?

1 个答案:

答案 0 :(得分:0)

可能是java编译器中的错误,如forward reference

所述