先看问题,如图所示
注解解释
@EqualsAndHashCode 作用与子类上
-
callSuper = true
,根据子类自身的字段值和从父类继承的字段值来生成hashcode,当两个子类对象比较时,只有子类对象的本身的字段值和继承父类的字段值都相同,equals方法的返回值是true。 -
callSuper = false
,根据子类自身的字段值来生成hashcode, 当两个子类对象比较时,只有子类对象的本身的字段值相同,父类字段值可以不同,equals方法的返回值是true。
IDEA检查提示并快速修复
正在生成 equals/hashCode 实现,但即使此类未扩展 java.lang.Object,也不调用超类。如果这是有意为之,请在您的类型中添加 ‘(callSuper=false)’。
检查信息: 提供 Lombok 注解的一般检查。
点击后,快速修复添加注解
测试代码
package com.st;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.junit.Test;/*** @author st* @date 2024/1/9 15:36*/@Data
@NoArgsConstructor
@AllArgsConstructor
class Animal {private String name;
}@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
class Cat extends Animal {private String age;public Cat(String name, String age) {super(name);this.age = age;}
}
public class TestAnnotation {@Testpublic void testCat() {Cat cat1 = new Cat("1", "1");Cat cat2 = new Cat("2", "1");System.out.println(cat1.equals(cat2));}
}