Ich stimme sicherlich zu, dass es Fälle gibt, in denen es ist besser, einige Methoden nicht über einen Konstruktor aufzurufen .
Sie machen privat beseitigt alle Zweifel: "Du sollst nicht passieren" .
Was aber, wenn Sie die Dinge offen halten wollen?
Es ist nicht nur den Zugangsmodifikator das ist das eigentliche Problem, wie ich zu erklären versucht habe aquí . Um ganz ehrlich zu sein, private
ist ein klarer Showstopper, bei dem protected
in der Regel noch eine (schädliche) Umgehung zulassen.
Ein eher allgemeiner Ratschlag:
- Starten Sie keine Threads von Ihrem Konstruktor aus
- lesen Sie keine Dateien aus Ihrem Konstruktor
- Rufen Sie keine APIs oder Dienste von Ihrem Konstruktor aus auf.
- Laden Sie keine Daten aus einer Datenbank über Ihren Konstruktor
- parsen Sie keine json oder xml Dokumente von Ihrem Konstruktor
Tun Sie dies nicht (in)direkt von Ihrem Konstruktor aus. Das schließt ein, dass Sie eine dieser Aktionen von einer privaten/geschützten Funktion aus durchführen, die vom Konstruktor aufgerufen wird.
Aufrufen einer start()
Methode aus Ihrem Konstruktor könnte ein Warnsignal sein.
Stattdessen sollten Sie eine öffentlich init()
, start()
o connect()
Methode. Und überlassen Sie die Verantwortung dem Verbraucher.
Einfach ausgedrückt: Sie wollen getrennt der Moment des " Vorbereitung " aus dem " Zündung ".
- Wenn ein Konstruktor erweitert werden kann, sollte er sich nicht selbst entzünden.
- Wenn sie sich selbst entzündet, besteht die Gefahr, dass sie gestartet wird, bevor sie fertig gebaut ist.
- Schließlich könnte eines Tages mehr Vorbereitung im Konstruktor einer Unterklasse hinzugefügt werden. Und Sie haben keine Kontrolle über die Reihenfolge der Ausführung des Konstruktors einer Oberklasse.
PS: Erwägen Sie die Implementierung der Verschließbar Schnittstelle mit.