2016-05-08 13 views
0

Gibt es eine Möglichkeit, die Annotation @Setter zu ändern, um allen über lombok erstellten Methoden eine benutzerdefinierte Logik hinzuzufügen.Benutzerdefinierter Setter über Lombok

Ich habe eine Klasse mit den Feldern initialisiert mit einigen Standardwerten. Jetzt möchte ich nur den Wert in den Feldern setzen, wenn der Wert nicht null ist.

Beispiel, etwas, die

public void setFoo(int foo) { 
    if (foo != null) { 
     this.foo = foo; 
    } 
} 

Zum Beispiel generates-, wenn ich die @Setter Anmerkung auf einer Jersey-Update anfordern Klasse verwenden, anstatt Dinge zu tun wie-

if (request.getFoo() != null) { 
    this.foo = request.getFoo(); 
} 

soll ich sein in der Lage, direkt zu tun-

this.setFoo(request.getFoo()); 

mit einigen Ergebnissen.

Antwort

0

Sie können Ihren eigenen benutzerdefinierten Setter hinzufügen, indem Sie @Setter & @Getter von Iombok kommentieren und dann auskommentieren.Andernfalls können Sie jede Methode mit @ lombok.experimental.Tolerate markieren, um sie vor lombok zu verbergen.

1

Ich nehme an, Sie Integer statt int nutzen verstanden, die keine Nullwerte zulassen und deshalb lösen Ihr Problem :)

Im Allgemeinen würde ich nicht empfehlen, die Logik der setFoo zu ändern. Das stumme Nicht-Setzen von foo auf eine beliebige Bedingung würde seine Verwendung Fehlern oder zumindest Missverständnissen aussetzen.

Mein Vorschlag ist, entweder eine benutzerdefinierte Methode mit dem expliziten Namen setFooIfNotNull(Integer foo) zu verwenden. Eine mögliche alternative Lösung wäre, das Feld foo mit der Anmerkung @NonNull zu markieren, um eine NullPointerException in einem Fall von Nullwerten zu werfen.

Vom Lombok @Setter Anmerkung documentation 'small print':

Alle Anmerkungen genannt @NonNull (Groß- und Kleinschreibung) auf dem Feld sind interpretiert als: Dieses Feld nicht immer halten null muss. Daher führen diese Annotationen zu einer expliziten Nullprüfung im generierten Setter.