Was ist ein „unvollständig konstruiertes Objekt“?

Goetz'sJava-Parallelität in der Praxis, Seite 41, erwähnt, wiethis Referenz kann während des Aufbaus entweichen. Ein Beispiel "Mach das nicht":

public class ThisEscape {
    public ThisEscape(EventSource source) {
        source.registerListener(
            new EventListener() {
                public void onEvent(Event e) {
                    doSomething(e);
                }
            });
    }
}

Hierthis ist "entkommen" über die Tatsache, dassdoSomething(e) verweist auf die AnlageThisEscape Beispiel. Die Situation kann mithilfe statischer Factory-Methoden behoben werden (erst das einfache Objekt erstellen, dann den Listener registrieren), anstatt öffentliche Konstruktoren (die die gesamte Arbeit erledigen). Das Buch geht weiter:

Das Veröffentlichen eines Objekts aus seinem Konstruktor heraus kann ein unvollständig erstelltes Objekt veröffentlichen. Das ist wahrauch wenn die Publikation die letzte Anweisung im Konstruktor ist. Wenn dasthis Referenz entweicht während des Aufbaus das Objekt wird berücksichtigtnicht richtig konstruiert.

Ich verstehe das nicht ganz. Wenn die Publikation die letzte Anweisung im Konstruktor ist, wurden nicht alle Konstruktionsarbeiten zuvor ausgeführt? Wie kommt es?this bis dahin nicht gültig? Anscheinend ist danach ein bisschen Voodoo los, aber was?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage