Los atributos de enumeración de Java devuelven nulo según el orden de acceso
Estaba explorando enums en Java para ver cómo se podían abusar y me encontré con un comportamiento que no podía explicar. Considere la siguiente clase:
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);
}
}
La primera instrucción en la función principal imprimirá 'WEED', como se esperaba. El segundo imprimirá 'nulo'. Sin embargo, si los cambia, es decir,
System.out.println(ENUM.ANIMALS.DOGS.GIN.RIVAL);
System.out.println(ENUM.ANIMALS.CATS.GARFIELD.RIVAL);
la primera instrucción imprimirá 'FELIX' y la segunda instrucción imprimirá ahora 'nulo'. ¿Hay alguien que pueda explicar este fenómeno?
Como referencia, estoy ejecutando el Java (TM) SE Runtime Environment (build 1.8.0_05-b13)