idea中java类属性(字段)链式赋值

很多人看到标题可能会想到 lombok 的 @Builder,lombok 在国内用的挺多的,开源的组件中 mybatis-plus 中用到了这个,使用这个有一个问题就是通过对应 get 和 set 方法找不到对应的赋值方法,因为 lombok 使用了 apt 在编译期生成了相关的字节码。这样对于喜欢看源码的人来说很不好,起码我在看国外开源的代码时没有看到过使用 lombok 的。

在工作期间就想到了一点,idea 中有没有那种相关生成 Builder 代码的插件?

经过多次尝试,发现了一个名为 innerbuilder 的插件可以做到和 lombok 生成的代码一致。

InnerBuilder - IntelliJ IDEs Plugin | Marketplace

如下代码为例

java 复制代码
public class SceneProductRelaInfo {

    /**
     * 场景信息
     */
    private SysnSceneProductInfo sysnSceneProductInfo;

    /**
     * 场景关联商品信息
     */
    private List<WarePortal> productInfoList;

    public SysnSceneProductInfo getSysnSceneProductInfo() {
        return sysnSceneProductInfo;
    }

    public void setSysnSceneProductInfo(SysnSceneProductInfo sysnSceneProductInfo) {
        this.sysnSceneProductInfo = sysnSceneProductInfo;
    }

    public List<WarePortal> getProductInfoList() {
        return productInfoList;
    }

    public void setProductInfoList(List<WarePortal> productInfoList) {
        this.productInfoList = productInfoList;
    }


}

在 idea->Settings->Plugins 中搜索 innerbuilder 进行安装

代码右键 Generate

按照如下处理即可

java 复制代码
public class SceneProductRelaInfo {

    /**
     * 场景信息
     */
    private SysnSceneProductInfo sysnSceneProductInfo;

    /**
     * 场景关联商品信息
     */
    private List<WarePortal> productInfoList;

    private SceneProductRelaInfo(Builder builder) {
        setSysnSceneProductInfo(builder.sysnSceneProductInfo);
        setProductInfoList(builder.productInfoList);
    }

    public SysnSceneProductInfo getSysnSceneProductInfo() {
        return sysnSceneProductInfo;
    }

    public void setSysnSceneProductInfo(SysnSceneProductInfo sysnSceneProductInfo) {
        this.sysnSceneProductInfo = sysnSceneProductInfo;
    }

    public List<WarePortal> getProductInfoList() {
        return productInfoList;
    }

    public void setProductInfoList(List<WarePortal> productInfoList) {
        this.productInfoList = productInfoList;
    }


    public static final class Builder {
        private SysnSceneProductInfo sysnSceneProductInfo;
        private List<WarePortal> productInfoList;

        private Builder() {
        }

        public static Builder builder() {
            return new Builder();
        }

        public Builder sysnSceneProductInfo(SysnSceneProductInfo val) {
            sysnSceneProductInfo = val;
            return this;
        }

        public Builder productInfoList(List<WarePortal> val) {
            productInfoList = val;
            return this;
        }

        public SceneProductRelaInfo build() {
            return new SceneProductRelaInfo(this);
        }
    }
}

最终生成出来的代码和 lombok 的一致。

java 复制代码
SceneProductRelaInfo build = SceneProductRelaInfo.builder().productInfoList(null).sysnSceneProductInfo(null).build();

上面的代码逻辑在使用 @Builder 注解和生成的代码中切换,没有异常。

lombok 原理

https://blog.csdn.net/ly279481968/article/details/108000799

https://www.jianshu.com/p/302c56f9574d

https://zhuanlan.zhihu.com/p/485004057

https://zhuanlan.zhihu.com/p/574760548

相关推荐
lzb_kkk9 分钟前
【JavaEE】文件io
java·开发语言·java-ee·1024程序员节
yang_shengy10 分钟前
【JavaEE】多线程(1)
java·开发语言·jvm·java-ee
果壳~13 分钟前
【Java】SpringBoot模拟流式输出,前端使用流式接收数据并打印
java·前端·spring boot
only-lucky14 分钟前
QT之QML从入门到精通(第七章)
java·数据库·qt
逆旅行天涯19 分钟前
Visual Studio Code 常用快捷键及常用插件
ide·vscode·编辑器
带刺的坐椅19 分钟前
Solon MVC 的 @Mapping 用法说明
java·mvc·ioc·solon
飞滕人生TYF21 分钟前
java Arrays 详解
java·python·排序算法
xisai8824 分钟前
2025年开考科目有哪些?
java·开发语言·javascript·算法·kotlin
想花27 分钟前
源码分析Spring Boot (v3.3.0)
java·spring boot·后端
陶然同学36 分钟前
RabbitMQ轻松构建高效可靠的消息队列系统
java·网络·分布式·rabbitmq·mq