Ich habe einen benutzerdefinierten Setter in meinem Lombok-basierten POJO:
%Vor%Aber wenn ich den von Lombok generierten Builder verwende:
%Vor%Mein benutzerdefinierter Setter wird nicht aufgerufen, daher ist das Passwort nicht codiert. Das macht mich traurig.
Mein benutzerdefinierter Setter wird natürlich aufgerufen, wenn ich ihn direkt verwende:
%Vor%Was kann ich tun, damit der Builder von Lombok meinen benutzerdefinierten Setter verwendet?
Nach die Dokumentation für @Builder
: Definieren Sie einfach selbst genug Skelett. Insbesondere generiert Lombok eine Klasse UserBuilder
, Felder, die die Felder User
und Builder-Methoden widerspiegeln, und Sie können einen Teil oder alle davon selbst bereitstellen.
Ich habe die Antwort von chrylis akzeptiert, aber der Vollständigkeit halber sind hier einige Möglichkeiten, die Anpassung und Duplizierung zu minimieren.
Benutzerdefinierter Setter und Builder mit statischem Helfer
Ein statischer Helper kann verwendet werden, um den Großteil der Funktionalität set password über die benutzerdefinierte User.UserBuilder::password
-Methode und die benutzerdefinierte User::setPassword
-Methode freizugeben:
Benutzerdefinierter Setter und Konstruktor
Ein benutzerdefinierter Konstruktor kann User::setPassword
verwenden, das von dem von Lombok generierten User.UserBuilder::build()
:
Benutzerdefinierter Setter und Konstruktor mit statischem Helper
Oder, etwas eleganter, mit einem benutzerdefinierten Konstruktor und einer statischen Hilfsmethode:
%Vor%Sie verwenden setPassword anstelle der Set-Methode des Builders.
Hier ist was für mich funktionierte:
%Vor% Das Ergebnis war:
User(username=This is my username, password=ENCRIYP Password)