枚举:“非法前向引用”的一致性
Posted
技术标签:
【中文标题】枚举:“非法前向引用”的一致性【英文标题】: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
的实例?
【问题讨论】:
【参考方案1】:可能是 java 编译器中的错误,如此处所述 forward reference
【讨论】:
以上是关于枚举:“非法前向引用”的一致性的主要内容,如果未能解决你的问题,请参考以下文章