效率提升工具-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 代码自动生成工具

相关推荐
MY_TEUCK1 小时前
【Java 后端】SpringBoot 登录认证与会话跟踪实战(JWT + Filter/Interceptor)
java·开发语言·spring boot
今天长肉了吗1 小时前
银行风控项目踩坑实录:指标跑了6小时,风险评分全挂了
java
随读手机2 小时前
多式联运信息交互平台完整方案(2026版)
java·ai·eclipse·云计算·区块链
许彰午2 小时前
03-二叉树——从递归遍历到非递归实现
java·算法
nj01282 小时前
Spring 循环依赖详解:三级缓存、早期引用、AOP 代理与懒加载
java·spring·缓存
野生技术架构师2 小时前
2026年最全Java面试题及答案汇总(建议收藏,面试前看这篇就够了)
java·开发语言·面试
程序员飞哥2 小时前
重构 AI 思维(一):Prompt Engineering,如何下达不可违抗的指令?
人工智能·后端
一只叫煤球的猫3 小时前
ThreadForge 源码解读一:ThreadScope 如何把并发任务放进清晰边界?
java·面试·开源
皮皮林5513 小时前
@Autowired 和 @Resource 注解有啥区别?你这项目怎么还混着用呢?
后端
洛_尘4 小时前
Python 5:使用库
java·前端·python