Im Folgenden sind die zwei Ansätze:Konstruktor mit allen Klasseneigenschaften oder Standardkonstruktor mit Setter?
- Konstruktor mit allen Klasseneigenschaften
Pros: Ich habe eine genaue Anzahl von Typen von Parametern eingeben, damit, wenn ich einen Fehler mache die Compiler mich warnt (Übrigens, gibt es eine Möglichkeit, das Problem zu verhindern, dass zwei Integer fälschlicherweise auf die Parameterliste geschaltet wurden?)
Nachteile: Wenn ich viele Eigenschaften habe, kann die Instantiierungslinie sehr lang werden und sie könnte sich über zwei oder mehr erstrecken mehr Linien
- Setter und der Standard leere Konstruktor
Pros: Ich kann klar sehen, was ich einstellen, so dass, wenn ich etwas falsch tue ich es so schnell lokalisieren kann, wie ich es bin eingeben (Ich kann den vorherigen Fehler nicht machen, zwei Variablen desselben Typs zu wechseln)
Nachteile: die Instanziierung eines Objekts mit vielen Eigenschaften könnte mehrere Zeilen dauern (weiß nicht, ob dies wirklich eine Con ist) und wenn Ich vergesse, eine Eigenschaft zu setzen, der Compiler sagt nichts.
Was werden Sie tun und warum? Kennen Sie ein beliebiges Lichtmuster (beachten Sie, dass es jedes Mal verwendet werden sollte, wenn ein Objekt mit 7 + Eigenschaften instanziiert wird), um es zu empfehlen? Ich frage das, weil ich große Konstruktoren nicht mag, wo ich nicht schnell herausfinden kann, wo die Variable ist, nach der ich suche, andererseits finde ich die "set all properties" anfällig dafür, einige der Eigenschaften zu verpassen .
meine Annahmen Sek Argument in Vor-und Nachteile, da sie nur mein Gedanken sind :)
Update - eine Frage, die ich gefunden habe, die im Zusammenhang mit dieser ist: Building big, immutable objects without using constructors having long parameter lists
Danke für den erklärenden Code –
Builder sind wirklich nett, wenn Sie ein komplexes Objekt haben. Ich kann es sehr empfehlen. –
und das Buch! Es ist wirklich ein Muss für Java-Programmierer lesen - es ist verfügbar auf O'Reilly Safari, wo ich es gelesen habe (wir haben das kleinste Abonnement) –