【发布时间】: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