Schönes Wochenende allerseits
Mein Test wirft ständig eine StackOverflow-Exception und ich verstehe nicht warum. Das hier ist der Stacktrace:
Nun geht es um Folgendes: Ich möchte verschiedene Objekte in einer Baumstruktur halten. Der Plan: es sei eine abstrakte Klasse TreeItem, die alles mitbringt was nötig ist, um im Baum herumzunavigieren.
Jedes TreeItem habe eine einmalige UUID-Objektkonstante und kann beliebig viele Kind-Elemente vom Typ TreeItem halten, und jedes Kind-Element kennt sein Parent-Objekt.
Die Idee ist jetzt, das ich mit Hilfe einer Liste von UUIDs durch den Baum navigieren kann. Diese Liste versteckt sich hinter einem Address-Objekt. Ein Address-Objekt kann von jedem TreeItem direkt angefordert werden. Dazu fragt ein TreeItem seinen Parent nach einem Address-Objekt, der Parent fragt wiederum seinen Parent nach einem Address-Objekt, ... , und am Anfang des Baums stellt das Wurzel-TreeItem fest, daß es keinen Parent hat. Dann erstellt es ein neues Address-Objekt, trägt sich dort ein und gibt das Address-Objekt an seinen Aufrufer zurück, der Aufrufer trägt sich in die Address-Liste ein und gibt das Address-Objekt wieder an seinen Aufrufer weiter, ... bis das Baumelement erreicht ist, an dem die Aufruferkette begann.
Im Prinzip ein einfaches Dekoratormuster -> einige rekursive Aufrufe.
Das hier ist die Methode, in der die Exception kommt:
Hat jemand eine Idee, warum es nach dem doch sehr kurzem Trace zu einer Exception kommt? Erkennt die JVM den rekursiven Aufruf automatisch und schiebt deshalb Panik?
Mein Test wirft ständig eine StackOverflow-Exception und ich verstehe nicht warum. Das hier ist der Stacktrace:
java.lang.StackOverflowError
at components.library.tree.TreeItem.getAddress(TreeItem.java:125)
at components.library.tree.TreeItem.getAddress(TreeItem.java:129)
Nun geht es um Folgendes: Ich möchte verschiedene Objekte in einer Baumstruktur halten. Der Plan: es sei eine abstrakte Klasse TreeItem, die alles mitbringt was nötig ist, um im Baum herumzunavigieren.
Jedes TreeItem habe eine einmalige UUID-Objektkonstante und kann beliebig viele Kind-Elemente vom Typ TreeItem halten, und jedes Kind-Element kennt sein Parent-Objekt.
Die Idee ist jetzt, das ich mit Hilfe einer Liste von UUIDs durch den Baum navigieren kann. Diese Liste versteckt sich hinter einem Address-Objekt. Ein Address-Objekt kann von jedem TreeItem direkt angefordert werden. Dazu fragt ein TreeItem seinen Parent nach einem Address-Objekt, der Parent fragt wiederum seinen Parent nach einem Address-Objekt, ... , und am Anfang des Baums stellt das Wurzel-TreeItem fest, daß es keinen Parent hat. Dann erstellt es ein neues Address-Objekt, trägt sich dort ein und gibt das Address-Objekt an seinen Aufrufer zurück, der Aufrufer trägt sich in die Address-Liste ein und gibt das Address-Objekt wieder an seinen Aufrufer weiter, ... bis das Baumelement erreicht ist, an dem die Aufruferkette begann.
Im Prinzip ein einfaches Dekoratormuster -> einige rekursive Aufrufe.
Das hier ist die Methode, in der die Exception kommt:
Java:
Address getAddress() {
Address a;
if (this.parent == null) { //Zeile 125
a = new Address(ME); //ME: private final UUID ME;
}
else {
a = this.parent.getAddress(); //Zeile 129
a.addItemToPath(ME);
}
return a;
}
Hat jemand eine Idee, warum es nach dem doch sehr kurzem Trace zu einer Exception kommt? Erkennt die JVM den rekursiven Aufruf automatisch und schiebt deshalb Panik?