效率提升工具-LOMBOK注解-(二)避坑指南

Lombok虽然使用很方便,可以节省很多无效代码输出,但是使用时稍不注意,会有意想不到的意外。本文主要针对一些坑进行总结。

@Data注解放在继承类注意事项

@Data放在普通类上面,会生成6种类型代码,【空构造方法】、【Get/Set方法】、【equals方法】、【canEqual】、【hashCode】、【toString】

java 复制代码
@Data
public class People {
    private int age;

    private String sex;
}

生成字节码反编译后代码如下

如果在继承类上加上注解

java 复制代码
@Data
public class Student extends People {
    private int level;
}

生成代码如下

可以看到,默认情况下equals hashCode toString方法都不会带上父类方法

解决方法是ToString EqualsAndHashCode方法加上callSuper = true

java 复制代码
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class Student extends People {
    private int level;
}

@Builder避坑,默认不生成无参构造方法

java 复制代码
@Builder
public class Dog {
    private String name;

    private int age;
}

生成的代码如下

解决方法是加上有参和无参的构造方法注解

java 复制代码
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Dog {
    private String name;

    private int age;
}

布尔类型isXXX避坑

boolean类型不会生成get方法,是生成isxxx方法,如果布尔类型是基本类型,还是会isxxx

java 复制代码
@Data
public class Cat {
    private boolean isOver;
}

解决措施是换成Bollean或者变量不要使用isxxx命令

@ToString无使用导致的**StackOverflowError**

举例如下

java 复制代码
@ToString
@Setter
@Getter
public class Node {
    private Object vale;
    private Node left;
    private Node parent;
    private Node right;

    public static void main(String[] args) {
        Node node = new Node();
        node.left = new Node();
        node.right = new Node();
        node.left.parent = node;
        System.out.println(node.left);
    }
}

执行main方法后,直接报错

主要原因是和parent打印循环依赖,最终导致toString栈溢出。

解决方案是加上exclude

java 复制代码
@ToString(exclude = {"parent"})
@Setter
@Getter
public class Node {
    private Object vale;
    private Node left;
    private Node parent;
    private Node right;

    public static void main(String[] args) {
        Node node = new Node();
        node.left = new Node();
        node.right = new Node();
        node.left.parent = node;
        System.out.println(node.left);
    }
}

总结

除了上述之外,应该还有一些坑

总体需要再使用时,最好验证一下自动生成的代码(反编译字节码),是不是符合自己的需求。 如果项目技术能力较差,最好不要使用Lombok工具。

参考
Lombok好用是好用,就是容易踩坑,这份避坑指南请查收
lombok小布尔类型boolean避坑
Java避坑指南:慎用Lombok 代码自动生成工具

相关推荐
猪猪拆迁队2 小时前
虚拟工厂仿真引擎的架构设计:让一条产线可编程、可观测、可干预
后端·ai编程
字节跳动数据库3 小时前
文章分享——相似函数处理方法
人工智能·后端·程序员
云技纵横3 小时前
@Transactional 失效的 7 种场景:第 5 种最难排查
后端
用户6757049885023 小时前
你知道 Go 结构体和结构体指针调用的区别吗?一文带你彻底搞懂!
后端·go
程序员cxuan3 小时前
读懂 Claude Code 架构分析系列,第一篇,开始!
人工智能·后端·架构
用户6757049885023 小时前
面试官问“装饰器模式”,这样回答薪资多要 3000!
后端
tntxia3 小时前
Geo Scene域名修改引起的一些问题
后端
用户298698530143 小时前
Java 实现 Word 文档加密与权限解除
java·后端
vanuan4 小时前
给你的A2A-Agent加把锁-认证鉴权实战指南
后端
自由路飞4 小时前
RAG 混合检索深挖:BM25 和向量分数为什么不能直接相加?
面试