简单简洁 - @EqualsAndHashCode 注解详解

用在类上,自动生成 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之使用详解

你可能感兴趣的:(lombok)