Ich möchte nur dann eine Auflistung von Objekten zu einer ArrayList hinzufügen, wenn das bestimmte Attribut nicht null ist.
Ich denke darüber nach, die ArrayList zu erweitern und die Prüfung in der Kindklasse zu implementieren.
Ein alternativer Weg besteht darin, nach dem Attribut zu suchen, bevor man es in eine Arraylist legt, aber das würde bedeuten, dass ich die if-Checks überall verstreuen muss, wenn ich die Objekte basierend auf der Logik zur Arraylist hinzufügen muss.
Ich würde gerne Ihre Gedanken dazu wissen ... bei einem zweiten Gedanken ist es ein Overkill?
Ich würde sogar empfehlen, ArrayList
mit einem gut dokumentierten Muster Decorator zu verpacken. Sie wickeln einfach Ihre ArrayList
mit einer anderen List
-Implementierung um, die die meisten Methoden delegiert, aber Validierungslogik hinzufügt:
List
-Implementierung. Sie können die Validierung zu LinkedList
oder Hibernate -backed persistente Listen. Sie können sogar an generische Collection
Decorator denken, um eine Sammlung zu validieren. Denken Sie trotz der Implementierung an einige Methoden, an die Sie beim Überschreiben denken müssen: add()
, addAll()
, set()
, subList()
(?) usw.
Auch Ihr Objekt muss unveränderlich sein, andernfalls kann der Benutzer ein gültiges Objekt hinzufügen / setzen und anschließend ändern, um den Vertrag zu verletzen.
Schließlich schrieb ich:
%Vor%aber beachte:
%Vor%was ein besseres Design ist.
Wie bereits erwähnt, wenn Sie Validierungen stapeln wollen, indem Sie jede Eigenschaft / Apsekt in einer einzelnen, separaten Klasse validieren, betrachten Sie das folgende Idiom:
%Vor%... und einige Implementierungen:
%Vor%Möchten Sie nur foo validieren?
%Vor%Möchten Sie sowohl foo als auch Balken validieren?
%Vor%Wenn Sie dies erzwingen möchten, sehe ich nicht, warum nicht (obwohl Sie den Rückgabewert der add-Methode überprüfen sollten, wenn Sie hinzufügen, um sicherzustellen, dass es erfolgreich war).
Dies ist ein guter Weg, um diese redundante Logik loszuwerden, die in späteren Software-Iterationen steckenbleiben kann oder nicht.
Ich halte das nicht für eine gute Praxis. Berücksichtigen Sie stattdessen das Schreiben einer Util-Methode in eine Util-Klasse mit zwei Parametern: Die Array-Liste und das Objekt, das Sie hinzufügen möchten. Dort können Sie überprüfen, was Sie wollen und die Logik über Ihren Code hinweg wiederverwenden.
Das einzige Problem wäre, wenn Sie diesen Code wiederverwenden und Sie sich nicht daran erinnern, dass Sie die ArrayList-Klasse überschrieben haben, stellen Sie sicher, dass Sie einen Kommentar schreiben.
Tags und Links java reusability arraylist abstraction