用在类上,自动生成 equals 方法和 hashCode 方法
参数exclude排除一些属性 ; 参数of指定仅使用哪些属性 ; 默认仅使用该类中定义的属性且不调用父类的方法 (即 callSuper=false)。
//父类
public class Person {
private String name;
private String sex;
public Person(String name, String sex) {
this.name = name;
this.sex = sex;
}
}
@EqualsAndHashCode(exclude = {"className"},callSuper = false)
public class Student extends Person{
@Getter@Setter
private int age;
@Getter@Setter
private String className;
public Student(String name,String sex,int age,String className) {
super(name,sex);
this.age = age;
this.className = className;
}
}
Student s1 = new Student("hresh","man",22,"Lv3");
Student s2 = new Student("hresh","woman",22,"Lv5");
System.out.println(s1.equals(s2));//true
解析:
子类实现@EqualsAndHashCode(callSuper = false) ,不调用父类的属性,那么子类属性里面的相同的话,那 hashcode 的值就相同,再加上排除对 className 属性的比对,所以代码里面的2个对象的 equals 方法的返回值是 true 。
即此此对比只对比了age字段的值,className被排除掉,不调用父类属性即name、sex属性不进行对比。
子类实现@EqualsAndHashCode(callSuper = true) ,即调用父类属性,equals返回false。
Lombok其它注解可参考:Lombok之使用详解