【发布时间】:2015-02-05 03:41:32
【问题描述】:
我正在探索 Java 中的枚举以了解它们如何被滥用,但我遇到了一种我无法解释的行为。考虑以下类:
public class PROGRAM {
public enum ENUM {;
public enum ANIMALS {;
public enum CATS {
FELIX(DOGS.AKAME),
GARFIELD(DOGS.WEED),
BUBSY(DOGS.GIN);
CATS(DOGS dog) {this.RIVAL = dog;}
public DOGS RIVAL;
}
public enum DOGS {
GIN(CATS.FELIX), WEED(CATS.BUBSY), AKAME(CATS.GARFIELD);
DOGS(CATS cat) {this.RIVAL = cat;}
public CATS RIVAL;
}
}
}
public static void main(String[] args) {
System.out.println(ENUM.ANIMALS.CATS.GARFIELD.RIVAL);
System.out.println(ENUM.ANIMALS.DOGS.GIN.RIVAL);
}
}
主函数中的第一条语句将按预期打印“WEED”。第二个将打印'null'。但是,如果您切换它们,即
System.out.println(ENUM.ANIMALS.DOGS.GIN.RIVAL);
System.out.println(ENUM.ANIMALS.CATS.GARFIELD.RIVAL);
第一条语句将打印“FELIX”,第二条语句现在将打印“null”。有没有人可以解释这种现象?
作为参考,我正在运行 Java(TM) SE 运行时环境(内部版本 1.8.0_05-b13)
【问题讨论】: