Erforderliche Argumente mit einem lombok @Builder
Wenn ich @Builder zu einer Klasse. Die generator-Methode erstellt wird.
Person.builder().name("john").surname("Smith").build();
Habe ich eine Anforderung, in denen ein bestimmtes Feld erforderlich ist. In diesem Fall, das Feld name ist erforderlich, aber der Nachname nicht. Im Idealfall würde ich gerne erklären, wie so.
Person.builder("john").surname("Smith").build()
Ich kann nicht herausfinden, wie dies zu tun. Ich habe versucht, indem das @ - Builder einen Konstruktor, aber es hat nicht funktioniert.
@Builder
public Person(String name) {
this.name = name;
}
Kommentar zu dem Problem
Lombok hat Probleme auf GitHub hat ein offene Frage für dieses github.com/rzwitserloot/lombok/issues/1043
InformationsquelleAutor der Frage jax | 2015-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie es leicht tun mit Lombok annotation-Konfiguration
Und dann verwenden Sie es wie dass
Natürlich
@ToString
ist optional hier.InformationsquelleAutor der Antwort Pawel
Ich würde empfehlen, gegen diesen Ansatz, wie Sie kämpfen, um konsequent anzuwenden auf andere Objekte. Stattdessen können Sie einfach markieren Sie die Felder, die mit
@lombok.NonNull
annotation und Lombok generieren, die null-Prüfungen für Sie in den Konstruktor und setter, so dassBuilder.build()
wird scheitern, wenn diese Felder nicht festgelegt sind.Mithilfe der builder-pattern ermöglicht es Ihnen, eine sehr klare Bestimmung, welche Felder Sie beim festlegen der Werte. Dieser ist bereits verloren, für das name-Feld in deinem Beispiel, und es wird weiter verloren gehen, für alle anderen erforderlichen Felder aus, wenn Sie ein Objekt mit mehreren erforderlichen Felder aus. Betrachten Sie das folgende Beispiel, können Sie sagen, das Feld, die nur durch das Lesen von code?
InformationsquelleAutor der Antwort Anton Koscejev
Hier ist ein anderer Ansatz:
InformationsquelleAutor der Antwort Kevin Day
Dies ist meine Lösung für das problem
inspiriert von diesem blog-post:
https://blog.jayway.com/2012/02/07/builder-pattern-with-a-twist/
InformationsquelleAutor der Antwort kozla13
Hier ist ein JUnit-test zum zeigen des Verhaltens aller Kombinationen der endgültig und nicht-Null:
InformationsquelleAutor der Antwort lilalinux
Einnahme von Kevin-Tag mit der Antwort einen Schritt weiter:
Es ist nicht ideal, aber es bietet compile-Zeit der Durchsetzung und Anrufer von dieser Klasse wird genau einem generator-Methode zu verwenden.
InformationsquelleAutor der Antwort The Gilbert Arenas Dagger