Kommentare zu: Flexible Constructor Bodies in Java: Code vor super() aufrufen https://www.happycoders.eu/de/java/flexible-constructor-bodies/ Tue, 06 May 2025 14:32:07 +0000 hourly 1 Von: Sven Woltmann https://www.happycoders.eu/de/java/flexible-constructor-bodies/#comment-33777 Wed, 28 Aug 2024 07:23:05 +0000 https://www.happycoders.eu/?p=38861#comment-33777 Als Antwort auf Thomas Paulsen.

Hallo Thomas,

grundsätzlich gebe ich dir völlig Recht. Auch aus Gründen der Threadsicherheit ist der Aufruf einer überschreibbaren Methode aus dem Konstruktor unsicher, da dadurch das nicht initialisierte Objekt veröffentlicht werden könnte (Stichwort "unsafe publication").

Doch nicht immer hat man Kontrolle über die Elternklasse – die könnte z. B. aus einer Drittanbieter-Library stammen. Im Beispiel würde das bedeuten, dass man `Shape` nicht ändern kann.

JEP 482 beschreibt diesen Use Case explizit: "Allowing such assignments would be useful as a way for a constructor in a subclass to defend against a constructor in a superclass seeing uninitialized fields in the subclass. This can occur when a constructor in a superclass invokes a method in the superclass that is overridden by a method in the subclass."

Gruß
Sven

]]>
Von: Thomas Paulsen https://www.happycoders.eu/de/java/flexible-constructor-bodies/#comment-33774 Wed, 28 Aug 2024 06:14:17 +0000 https://www.happycoders.eu/?p=38861#comment-33774 Hallo,

guter Artikel.

Allerdings zu Use Case 3:
Es ist schlechter Programmierstil, in einem Konstruktor Methoden aufzurufen, die nicht private oder final sind, da man die Ableitungen der Klasse häufig nicht unter Kontrolle hat. Spätestens, wenn nachträglich überschreibbare Methoden im Konstruktor eingebaut und aufgerufen werden, sind Fehler vorprogrammiert.

Falsche Zahlen sind nur ein Beispiel, NPEs sind viel "lustiger".

Das neue Feature dafür zu "missbrauchen", um die autretenden Probleme in den Griff zu bekommen, halte ich nicht für sinnvoll.

-> Shape umschreiben

Gruß
Thomas

]]>