Java中如何用Lombok实现带自定义逻辑的构造方法与setter?
用Lombok实现自定义构造方法与Setter方法
1. 带Integer可变参数的构造方法
Lombok没有直接生成可变参数构造方法的注解,你可以手动编写这个构造方法,它能和Lombok的其他注解(比如@Builder、@Singular)共存,不会产生冲突。
结合@Builder的示例代码:
import lombok.Builder; import lombok.Singular; import java.util.Arrays; import java.util.Collections; import java.util.List; @Builder public class Bean { private List<Integer> list; // 保留手动编写的List参数构造方法(配合@Builder/@Singular实现不可变列表效果) public Bean(@Singular List<Integer> list) { this.list = Collections.unmodifiableList(list); } // 手动编写可变参数构造方法,Lombok不会干预 public Bean(Integer... array) { this(Arrays.asList(array)); } }
@Builder会基于带List参数的构造方法生成建造者模式,手动添加的可变参数构造方法不受影响,可正常使用。
2. 带自定义逻辑的setList方法
如果setter方法有自定义逻辑(比如将可变参数转成List赋值),直接手动编写该方法即可,Lombok的@Setter注解会自动跳过这个方法的生成,避免重复定义。
示例代码(结合@Setter处理其他字段,保留自定义setList):
import lombok.Setter; import java.util.Arrays; import java.util.Collections; import java.util.List; @Setter // 为其他字段生成默认setter,若只有list字段可省略 public class Bean { private List<Integer> list; public Bean(List<Integer> list) { this.list = Collections.unmodifiableList(list); } public Bean(Integer... array) { this(Arrays.asList(array)); } // 手动编写带自定义逻辑的setList,Lombok不会再生成默认的setList方法 public void setList(Integer... array) { this.list = Arrays.asList(array); } }
若类中有其他字段,@Setter会为它们生成标准setter;若只有list字段,可直接省略@Setter,保留手动编写的setList。
如果想让建造者模式也支持可变参数入参,可在建造者中添加自定义方法:
import lombok.Builder; import lombok.Singular; import java.util.Arrays; import java.util.Collections; import java.util.List; @Builder public class Bean { private List<Integer> list; public Bean(@Singular List<Integer> list) { this.list = Collections.unmodifiableList(list); } public Bean(Integer... array) { this(Arrays.asList(array)); } // 为建造者添加可变参数的自定义方法 public static class BeanBuilder { public BeanBuilder list(Integer... array) { this.list = Arrays.asList(array); return this; } } }
这样既可以用Bean.builder().list(1,2,3).build(),也可以用new Bean(1,2,3)或bean.setList(4,5,6)调用。
内容的提问来源于stack exchange,提问作者xmcx
相关产品推荐
相关产品推荐

