You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:40:40