簡體   English   中英

通過龍目島自定義二傳手

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM