【编程分享】如何去覆盖lombok中使用@Builder注解生成的Builder类的ToString()方法?

【编程分享】如何去覆盖lombok中使用@Builder注解生成的Builder类的ToString()方法?

🌟 Lombok的Builder模式还能这么玩?

‌🏷️ 标签‌:#Java黑科技 #干货分享

🎁‌ 文末还准备了idea快速升级maven版本插件分享,一定要看到最后!‌

📚 正文

你有没有遇到过要覆盖生成Builder类的ToString()方法的问题呢?请问你是怎么解决的呀?可以在评论区互动留言分享哦~

小编是先问了AI, 然后在网上搜索了一通,翻了好大会儿没找到...再然后嘞,小编就开始🌚悄悄带上了痛苦🎭。

突然,小编灵光一现💡 想到了以下两种方式,并经过了实操验证~ 好开心😄

打着独乐乐不如众乐乐的精神,小编就立马梳理分享出来啦。好啦,废话不多说,开始发车~

方式一:

在定义@Builder的类里去定义对应的Builder类, 然后重写toString()方法即可(其实就是可以利用lombok可以复用类的toString()方法)

注: 类名可以在编译后通过class获取。如果是默认的话则Builder的类名为原类名加Builder (当前使用lombok版本为: 1.18.12)

typescript 复制代码
import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class MyOptions {

    private String param1;
    private String param2;
    private String param3;

    @Override
    public String toString() {
        return ToStringUtils.toString(this);
    }

    /**
     * 定义Builder类的ToString方法
     */
    public static class MyOptionsBuilder {
        @Override
        public String toString() {
            return ToStringUtils.toString(this);
        }
    }

}

方式二:

CV大法~

第一步:先正常使用@Builder注解,然后进行编译,编译完成后移除当前类的@Builder注解

第二步:找到编译的class文件,复制编译生成的获取Builder类对象的builder()静态方法。

第三步:找到编译的class文件,复制编译生成的Builder类的全部内容。(可新建单独的类文件)

第四步:自行定义Builder类的ToString()方法即可

优点: 完全可控

缺点: 在模型变动时需要同步修改Builder类

基类:

typescript 复制代码
import lombok.Builder;
import lombok.Data;

@AllArgsConstructor
@Builder
@Data
public class MyOptions1 {

    private String param1;
    private String param2;
    private String param3;

    @Override
    public String toString() {
        return ToStringUtils.toString(this);
    }

}

最终完成类:

typescript 复制代码
@AllArgsConstructor
@Data
public class MyOptions2 {

    private String param1;
    private String param2;
    private String param3;

    @Override
    public String toString() {
        return ToStringUtils.toString(this);
    }


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

    public static class MyOptions2Builder {
        private String param1;
        private String param2;
        private String param3;

        MyOptions2Builder() {
        }

        public MyOptions2Builder param1(String param1) {
            this.param1 = param1;
            return this;
        }

        public MyOptions2Builder param2(String param2) {
            this.param2 = param2;
            return this;
        }

        public MyOptions2Builder param3(String param3) {
            this.param3 = param3;
            return this;
        }

        public MyOptions2 build() {
            return new MyOptions2(this.param1, this.param2, this.param3);
        }

        @Override
        public String toString() {
            return ToStringUtils.toString(this);
        }

    }

}

测试类

ruby 复制代码
import com.alibaba.fastjson2.JSON;

public class MyOptionsTest {
    public static void main(String[] args) {
        MyOptions myOptions = MyOptions.builder().param1("1").param2("2").param3("3").build();

        MyOptions2 myOptions2 = MyOptions2.builder().param1("1").param2("2").param3("3").build();

        System.out.println(JSON.toJSONString(myOptions));  //输出 {"param1":"1","param2":"2","param3":"3"}

        System.out.println(JSON.toJSONString(myOptions2)); //输出 {"param1":"1","param2":"2","param3":"3"}
    }
}

ToStringUtils

typescript 复制代码
public class ToStringUtils {

    private ToStringUtils() {

    }

    public static String toString(Object o) {
        if (o == null) {
            return null;
        }
        return o.getClass().getName() + "@" + Integer.toHexString(o.hashCode());
    }
}

插件分享

框架开发大佬、中台开发大佬快来看~ Maven快速调整项目版本再也不用手敲命令啦,小白也能快速调整!!!

🎁 关注后回复【申请试用】领取IDEA Maven快速升级插件KEY

结尾

以上就是本篇文章的全部内容啦,感谢你的阅读和观看。如果你觉得这篇文章有所帮助,欢迎"点赞"或分享给需要的小伙伴~

相关推荐
Terio_my26 分钟前
Spring Boot 热部署配置与禁用
java·spring boot·后端
我是华为OD~HR~栗栗呀2 小时前
Java面经(22届考研-华oD)
java·后端·python·华为od·华为
IT_陈寒2 小时前
SpringBoot3踩坑实录:一个@Async注解让我多扛了5000QPS
前端·人工智能·后端
大鱼七成饱3 小时前
Rust 新手必看:彻底搞懂 String 和 &str,不再被坑!
后端
野犬寒鸦3 小时前
从零起步学习Redis || 第五章:利用Redis构造分布式全局唯一ID
java·服务器·数据库·redis·分布式·后端·缓存
做运维的阿瑞5 小时前
Python原生数据结构深度解析:从入门到精通
开发语言·数据结构·后端·python·系统架构
璨sou5 小时前
Rust语言--基础入门到应用
后端·rust
一只学java的小汉堡6 小时前
Spring Boot 配置详解:从引导器到注解实战(初学者指南)
java·spring boot·后端
__XYZ6 小时前
Vala编程语言高级特性-弱引用和所有权
c语言·开发语言·后端·c#
IT_陈寒6 小时前
Python开发者必坑指南:3个看似聪明实则致命的‘优化’让我损失了50%性能
前端·人工智能·后端