Nichts besonderes und nichts großes und auch kein wirklicher Rant, ich hatte heute nur ein wenig Spaß mit static im Java-Code. Es war auch nichts bösartiges und es war eher eine Erkenntnis als “drüber aufregen”.
Ich hab gerade eine Klasse geschrieben gehabt, die verschiedene Konfigurationsoptionen beinhaltet. Damit es ein wenig strukturiert ist, habe ich sie entsprechend gebündelt und in statische Unterklassen gepackt,
in etwa so (nur vom Prinzip wegen Originalcode copyrights):
Einfach als Datenklassen nehmen wir das hier noch dabei:
Und die geplante Klasse mit den ganzen Konfigurationen war dann das hier:
Aber die overrides wurden nicht eingetragen. Der static Block wurde nicht ausgeführt, weil ich zwar im Code auf die Konstanten in den Unterklassen zugreife, aber eben nichts in der eigentlichen Klasse mache.
Genauso würde der static Block auch bei diesem Code nicht ausgeführt:
Dadurch, dass PORT bereits beim compilen eine Konstante ist wird sie dort eingesetzt, wo sie genutzt wird, anstatt die Klasse zu laden (je nachdem, wie weit der Compiler optimiert usw). Anders ist es zum
Beispiel bei dem nachfolgenden Code, bei dem erst zur Laufzeit der Wert gesetzt wird:
Ergebnis bei meinem Konfigurationscode für Büchergeschäfte - der im echten Code noch ein wenig anders aussieht und vor allem nichts mit Büchern zu tun hat - ist dann letztendlich dafür zu sorgen, dass in jeder Unterklasse
ein static Block eingebaut ist, der die Overrides einträgt: