【问题标题】:Enum: consistency of “illegal forward references”枚举:“非法前向引用”的一致性
【发布时间】:2015-09-18 21:58:42
【问题描述】:

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

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 类型的参数。

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

【问题讨论】:

    标签: java constructor enums arguments


    【解决方案1】:

    可能是 java 编译器中的错误,如此处所述 forward reference

    【讨论】:

      猜你喜欢
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 2011-12-23
      相关资源
      最近更新 更多