Я разрабатываю LALG-компилятор для моего курса в колледже на Java 1.6. Поэтому я сделал класс классов и класс грамматики.Enum of Enum 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;
}
}
Когда я звоню EnumTypes.E.getEnumTiposValue().getValues()
, где, как предполагается, будет значение EnumTypes.F
является NULL.
Главная
public class Main {
public static void main(String[] args) {
//prints [A, B, null, D]
System.out.println(Arrays.toString(EnumTypes.E.getEnumTiposValue().getValues()));
}
}
Есть обходной путь или что-то подобное?
Спасибо!
+1 и воспроизведение здесь: http://ideone.com/O9bZx3 –
выглядит как головоломка круговой зависимости, связанной к static init из двух констант классов enum, ссылающихся друг на друга. –
Это может происходить иногда независимо от круговой зависимости, особенно если ваша ленивая загрузка что-то или использование какого-то странного загрузчика классов. –