Verwenden Sie benutzerdefinierte Setter in Lombok Builder

8

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?

    
Jan Nielsen 21.02.2017, 23:23
quelle

3 Antworten

12

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.

%Vor%     
chrylis 21.02.2017, 23:35
quelle
2

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:

%Vor%

Benutzerdefinierter Setter und Konstruktor

Ein benutzerdefinierter Konstruktor kann User::setPassword verwenden, das von dem von Lombok generierten User.UserBuilder::build() :

aufgerufen wird %Vor%

Benutzerdefinierter Setter und Konstruktor mit statischem Helper

Oder, etwas eleganter, mit einem benutzerdefinierten Konstruktor und einer statischen Hilfsmethode:

%Vor%     
Jan Nielsen 22.02.2017 14:00
quelle
0

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)

    
Bojan Petkovic 21.02.2017 23:47
quelle

Tags und Links