通过龙目岛定制setter

时间:2016-05-08 03:12:12

标签: java lombok

有没有办法修改@Setter注释,为通过lombok构建的所有set方法添加一些自定义逻辑。

我有一个类,其字段使用一些默认值进行初始化。现在我只想在值不为空时在字段中设置值。

示例,生成的内容 -

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

例如,如果我在Jersey Update Request类中使用@Setter注释,而不是像 -

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

我应该可以直接做 -

this.setFoo(request.getFoo());

有一些结果。

3 个答案:

答案 0 :(得分:1)

我假设您打算使用Integer而不是int,它不允许空值,因此可以解决您的问题:)

一般情况下,我不建议更改setFoo的逻辑。默默地不在任意条件下设置foo会将其用法暴露给错误或至少是误解。

我的建议是使用明确命名为setFooIfNotNull(Integer foo)的自定义方法。一种可能的替代解决方案是使用注释foo标记字段@NonNull,以便在空值的情况下抛出NullPointerException。

来自Lombok @Setter注释documentation 'small print'

  

字段上名为@NonNull(不区分大小写)的任何注释都是   解释为:此字段不得保持为null。因此,这些   注释会在生成的setter中生成显式空值检查。

答案 1 :(得分:0)

您可以通过评论@Setter&添加自己的自定义设置器@Getter of lombok然后取消注释它。否则你可以用@ lombok.experimental.Tolerate标记任何方法来隐藏它们从lombok。

答案 2 :(得分:0)

我要添加此答案,因为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;
    }
}