lombok使用时一些注意事项
** lombok常用注解:**
@Data: 自动生成get,set,toString,equals,HashCode方法
@AllArgsConstructor: 有参构造
@NoArgsConstructor: 无参构造
@EqualsAndHashCode(callSuper = true) :在生成equals,HashCode方法时,把继承的父类成员变量也包含在内, 在子类中使用
@ToString(callSuper = true): 在生成toString方法时,把把继承的父类成员变量也包含在内,在子类中使用
@Builder: 在没有继承的父类时生效,
@SuperBuilder:在继承父类时,父类和子类同时使用,才会生效
举例说明
首先创建2个类(Student, Person)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class Student extends Person{
private String name;
private int age;
}
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String sex;
}
在使用@SuperBuilder和@Builder后,我们在创建对象时会更加简明, 告别setter方法
@Builder:构造对象时只有本类的成员变量,没有父类的成员变量
Student student = Student.builder().name("杨幂").age(22).build();
@SuperBuilder: 构造对象时本类的成员变量和父类的成员变量都包含; 注意:子类和父类同时加@SuperBuilder才会生效
Student student = Student.builder().sex("女").name("杨幂").age(22).build();
在继承父类时, 子类上必须使用:
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
否则生成Equals();HashCode():ToString只有该类的成员变量; 不包含父类的成员变量
子类未使用@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
if (!super.equals(o)) return false;
Student student = (Student) o;
return getAge() == student.getAge() &&
Objects.equals(getName(), student.getName());
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), getName(), getAge());
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
子类使用@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
if (!super.equals(o)) return false;
Student student = (Student) o;
return getAge() == student.getAge() &&
getName().equals(student.getName())&&getSex().equals(student.getSex());
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), getName(), getAge());
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
"sex='" + getSex() + '\'' +
", age=" + age +
'}';
}
在继承父类时推荐子类上使用的注解:
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)