文
章
目
录
章
目
录
本文主要讲解关于Lombok注解使用注意事项相关内容,让我们来一起学习下吧!
Lombok虽然使用很方便,可以节省很多无效代码输出,但是使用时稍不注意,会有意想不到的意外。本文主要针对一些坑进行总结。
@Data注解放在继承类注意事项
@Data放在普通类上面,会生成6种类型代码,【空构造方法】、【Get/Set方法】、【equals方法】、【canEqual】、【hashCode】、【toString】
@Data
public class People {
private int age;
private String sex;
}
如果在继承类上加上注解
@Data
public class Student extends People {
private int level;
}
可以看到,默认情况下
equals
hashCode
toString
方法都不会带上父类方法
解决方法是ToString
EqualsAndHashCode
方法加上callSuper = true
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class Student extends People {
private int level;
}
@Builder避坑,默认不生成无参构造方法
@Builder
public class Dog {
private String name;
private int age;
}
解决方法是加上有参和无参的构造方法注解
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Dog {
private String name;
private int age;
}
布尔类型isXXX避坑
boolean类型不会生成get方法,是生成isxxx方法,如果布尔类型是基本类型,还是会isxxx
@Data
public class Cat {
private boolean isOver;
}
@ToString无使用导致的**StackOverflowError**
举例如下
@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
@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注解使用注意事项相关的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客(www.panziye.com),学习愉快哦!