Opracowuję kompilator LALG do mojego kursu kolegium na Java 1.6. Zrobiłem więc klasę typów i gramatykę.Enum of Enum jest NULL
EnumTypes
public enum EnumTypes {
A("OLA"),
B("MUNDO"),
C("HELLO"),
D("WORLD"),
/**
* The order below is reversed on purpose.
* Revert it and will you get a NULL list of types furder.
*/
I(EnumGrammar.THREE),
H(EnumGrammar.TWO),
F(EnumGrammar.ONE),
E(EnumGrammar.ZERO);
private String strValue;
private EnumGrammar enumGrammarValue;
private EnumTypes(String strValue) {
this.strValue = strValue;
}
private EnumTypes(EnumGrammar enumGrammarValue) {
this.enumGrammarValue = enumGrammarValue;
}
public String getStrValue() {
return strValue;
}
public EnumGrammar getEnumTiposValue() {
return enumGrammarValue;
}
}
EnumGrammar
public enum EnumGrammar {
ZERO(EnumTypes.A,EnumTypes.B,EnumTypes.F,EnumTypes.D),
ONE(EnumTypes.C),
TWO(EnumTypes.B,EnumTypes.H),
THREE(EnumTypes.D,EnumTypes.A,EnumTypes.C);
private EnumTypes[] values;
private EnumGrammar(EnumTypes ... values) {
this.values = values;
}
public EnumTypes[] getValues() {
return values;
}
}
Kiedy zadzwonić EnumTypes.E.getEnumTiposValue().getValues()
gdzie mają być wartość EnumTypes.F
jest NULL.
główna
public class Main {
public static void main(String[] args) {
//prints [A, B, null, D]
System.out.println(Arrays.toString(EnumTypes.E.getEnumTiposValue().getValues()));
}
}
Istnieje obejście lub coś w tym stylu?
Dzięki!
+1 i reprodukcja jest tutaj: http://ideone.com/O9bZx3 –
Wygląda okrągłym zależności układanki związanej z tą static init z dwóch stałych klas enum, które się nawzajem odwołują. –
Może się to zdarzyć czasami niezależnie od zależności cyklicznej, jeśli leniwy ładujesz coś lub używasz jakiegoś dziwnego programu ładującego klasy. –