[英]Custom setter via Lombok
有沒有一種方法可以修改@Setter
注釋,以便為通過@Setter
構建的所有set方法添加一些自定義邏輯。
我有一類用一些默認值初始化的字段。 現在,我只想在值不為null的情況下在字段中設置值。
例如,產生的東西-
public void setFoo(int foo) {
if (foo != null) {
this.foo = foo;
}
}
例如,如果我在Jersey更新請求類上使用@Setter
注釋,而不是執行以下操作:
if (request.getFoo() != null) {
this.foo = request.getFoo();
}
我應該能夠直接做到-
this.setFoo(request.getFoo());
有一些結果。
我假設您打算使用Integer
而不是int
,后者不允許空值,因此可以解決您的問題:)
通常,我不建議更改setFoo
的邏輯。 默默地不將foo
設置在任意條件下會將其用法暴露給bug或至少引起誤解。
我的建議是使用顯式命名為setFooIfNotNull(Integer foo)
的自定義方法。 一種可能的替代解決方案是在字段foo
上標注@NonNull
注釋,以在出現空值的情況下引發NullPointerException。
從Lombok @Setter
注釋文檔“小字體”中 :
字段上任何名為@NonNull(不區分大小寫)的注釋都將解釋為:此字段永遠不能為null。 因此,這些注釋會在生成的setter中導致顯式的null檢查。
您可以通過注釋lombok的@Setter和@Getter來添加自己的自定義設置器,然后取消注釋。否則,您可以使用@ lombok.experimental.Tolerate標記任何方法以將其從lombok中隱藏。
我要添加此答案,因為Sumeet的日期截至2019年已過時。
您可以通過簡單地編寫自己的方法來提供自己的getter或setter邏輯。
package com.example;
import lombok.Getter;
@Getter
public class Foo {
//Will not generate a getter for 'test'
private String test;
//Will generate a getter for 'num' because we haven't provided our own
private int num;
public String getTest(){
if(test == null){
throw new Exception("Don't mind me, I'm just a silly exception");
}
return test;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.