LomBok使用的几处小细节

先抛出一个实践认证结论,优先级关系

@AllArgsConstructor,@NoArgsConstructor 》@Builder》@Data,@Getter,@Setter

1.@Getter 生成get方法、无参函数

2.@Setter 生成set方法、无参函数

3.@Data 生成get、set方法,无参函数,hashCode,equals,canEqual,toString方法

4.@Builder 生成全参函数、builder静态方法及XXXBuilder静态内置类

5.@AllArgsConstructor 参函数

6.@NoArgsConstructor 参函数

测试a.

不引入@AllArgsConstructor,@NoArgsConstructor两个注解时,对@Builder,@Data,@Getter,@Setter两两组合反编译发现

只要引入了@Builder,无参函数就没了被全参函数代替

测试b.

不引入@Builder注解时,对@AllArgsConstructor,@NoArgsConstructor,@Data,@Getter,@Setter两两组合反编译发现

构造函数以@AllArgsConstructor,@NoArgsConstructor为准,@Data,@Getter,@Setter的无参函数优先级低

测试c.

在引入@Builder和@NoArgsConstructor时编译报错,因为@Builder必须依赖全参函数,而@NoArgsConstructor优先级高使得

类没有全参函数故编译报错,此时加入@AllArgsConstructor就编译通过了。

增:继承关系下@Data @Builder需要作出的调整

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class Student extends Teacher {
private String name;

@Builder
Student(String a,String b){
super(b);
this.name = b;
}
}

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
private String classname;
}


注意父类不能使用@Builder,再增加全参函数供子类调用
原文地址:https://www.cnblogs.com/xuetieqi/p/13844688.html