简单简洁 - @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之使用详解

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值