Kapitel 58. Minimale Konstrukteure

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Steve Freeman

Ein Muster, das ich regelmäßig sehe, ist die Arbeit im Konstruktor: Er nimmt eine Reihe von Argumenten auf und wandelt sie in Werte für die Felder um. Das sieht oft wie folgt aus:

public class Thing {
    private final Fixed fixed;
    private Details details;
    private NotFixed notFixed;
    // more fields

    public Thing(Fixed fixed, 
                 Dependencies dependencies,
                 OtherStuff otherStuff) {
        this.fixed = fixed;
        setup(dependencies, otherStuff);
    }
}

Ich gehe davon aus, dass setup die übrigen Felder auf der Grundlage von dependencies und otherStuff initialisiert, aber aus der Konstruktorsignatur geht nicht hervor, welche Werte genau erforderlich sind, um eine neue Instanz zu erstellen. Es ist auch nicht klar, welche Felder sich während der Lebensdauer des Objekts ändern können, da sie nicht final werden können, wenn sie nicht in einem Konstruktor initialisiert werden. Schließlich ist diese Klasse schwieriger zu testen, als sie sein sollte, weil ihre Instanziierung die richtige Struktur in den Argumenten erfordert, die an setup übergeben werden.

Schlimmer ist, dass ich gelegentlich Konstrukteure wie diesen gesehen habe:

 public class Thing { private Weather currentWeather; public Thing(String weatherServiceHost) { currentWeather ...

Get 97 Dinge, die jeder Java-Programmierer wissen sollte now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.