Ich habe ein Spielzeugbeispiel erstellt, in der Hoffnung, einen Fehler zu replizieren, aber es funktioniert. Aber ich kann keinen Fehler im ursprünglichen, längeren Code finden. Ich vermute also, dass dieser Ansatz funktioniert oder inkonsistent scheitern kann. Und so ist die Frage: Ist dieser Ansatz nicht lebensfähig und nicht empfohlen? Art einer Rekursion in den Konstruktoren. Aber in meinem Hauptcode kann ich nur Null als Wert des analogen Feldes erhalten, obwohl ich versucht habe, an mehreren Stellen anzurufen und zu inspizieren. Vielleicht vermisse ich nur einen Fehler. Aber dann sollte ich vielleicht nicht versuchen, dies zu tun?
Code: Select all
public enum Animal {
APE,
HUMAN;
// nested object as field to contain properties
public final Properties props;
// private enum constructor which instantiates and populates the properties object
private Animal() {
props = new Animal.Properties(this);
}
public class Properties {
public final int height;
public final Animal ancestor;
private Properties(Animal animal) {
switch (animal) {
case APE -> {
this.height = 48;
this.ancestor = null;
}
case HUMAN -> {
this.height = 60;
this.ancestor = APE; // recursive reference to another enum value
}
default -> {
this.height = 0;
this.ancestor = null;
}
}
}
}
}