Bei dieser Frage geht es darum, ob eine verschachtelte Klasse in Java eine statische verschachtelte Klasse oder eine innere verschachtelte Klasse sein soll. Ich habe hier und auf Stack Overflow gesucht, konnte aber keine wirklichen Fragen zu den Auswirkungen dieser Entscheidung auf das Design finden.
Die Fragen, die ich gefunden habe, beziehen sich auf den Unterschied zwischen statischen und inneren verschachtelten Klassen, was mir klar ist. Ich habe jedoch noch keinen überzeugenden Grund gefunden, jemals eine statische verschachtelte Klasse in Java zu verwenden - mit Ausnahme von anonymen Klassen, die ich für diese Frage nicht berücksichtige.
Hier ist mein Verständnis der Auswirkungen der Verwendung statisch verschachtelter Klassen:
- Weniger Kopplung: Im Allgemeinen erhalten wir weniger Kopplung, da die Klasse nicht direkt auf die Attribute ihrer äußeren Klasse zugreifen kann. Weniger Kopplung bedeutet im Allgemeinen eine bessere Codequalität, einfacheres Testen, Refactoring usw.
- Single
Class
: Der Klassenlader muss sich nicht jedes Mal um eine neue Klasse kümmern, sondern erstellt ein Objekt der äußeren Klasse. Wir bekommen immer wieder neue Objekte für die gleiche Klasse.
Für eine innere Klasse empfinde ich den Zugang zu den Attributen der äußeren Klasse im Allgemeinen als einen Vorteil. Ich möchte diesbezüglich einen konstruktiven Unterschied machen, da dieser direkte Zugriff eine hohe Kopplung bedeutet. Wenn wir die verschachtelte Klasse jemals in eine separate Klasse der obersten Ebene extrahieren möchten, können wir dies erst tun, nachdem wir uns im Wesentlichen umgedreht haben es in eine statische verschachtelte Klasse.
Meine Frage lautet also: Liege ich falsch in der Annahme, dass der für nicht statische innere Klassen verfügbare Attributzugriff zu einer hohen Kopplung und damit zu einer geringeren Codequalität führt und dass ich daraus schließen sollte, dass (nicht anonyme) verschachtelte Klassen vorhanden sind in der Regel statisch sein?
Oder mit anderen Worten: Gibt es einen überzeugenden Grund, warum man eine verschachtelte innere Klasse bevorzugen würde?