【问题标题】:Custom setter via Lombok通过 Lombok 自定义设置器
【发布时间】:2016-05-08 03:12:12
【问题描述】:

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

我有一个用一些默认值初始化字段的类。现在,如果值不为空,我只想在字段中设置值。

例如,产生的东西-

 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());

有一些结果。

【问题讨论】:

    标签: java lombok


    【解决方案1】:

    我正在添加这个答案,因为 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;
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      一般来说,我不建议更改setFoo 的逻辑。在任意条件下静默不设置foo 会使它的使用暴露于错误或至少会引起误解。

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

      来自龙目岛@Setter注解documentation 'small print'

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

      【讨论】:

        【解决方案3】:

        您可以通过注释 lombok 的 @Setter 和 @Getter 来添加自己的自定义设置器,然后取消注释它。否则您可以使用 @lombok.experimental.Tolerate 标记任何方法以将它们隐藏在 lombok 中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-15
          • 2016-10-31
          • 2023-03-29
          • 2012-07-13
          • 1970-01-01
          相关资源
          最近更新 更多