@EqualsAndHashCode(callSuper = false) 是用于在 Java 类中生成 equals() 和 hashCode() 方法的注解。它的参数 callSuper 是一个布尔值,用于指定是否调用父类的 equals() 和 hashCode() 方法。

当 callSuper 参数设置为 false 时,生成的 equals() 和 hashCode() 方法只会比较当前类的字段,不包括父类的字段。这意味着,如果父类的字段对于对象的相等性判断和哈希码计算是重要的,那么设置 callSuper 为 false 可能会导致不正确的结果。

示例:

@EqualsAndHashCode(callSuper = false)
public class ChildClass extends ParentClass {
    private int childField;

    // 省略构造方法、getter 和 setter 方法

    // 只比较 ChildClass 的字段
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ChildClass that = (ChildClass) o;
        return childField == that.childField;
    }

    // 只计算 ChildClass 的哈希码
    @Override
    public int hashCode() {
        return Objects.hash(childField);
    }
}

在上面的例子中,ChildClass 类使用 @EqualsAndHashCode(callSuper = false) 注解,表示生成的 equals() 和 hashCode() 方法只会比较和计算 ChildClass 的字段和哈希码,不包括父类的字段和哈希码

EqualsAndHashCodecallSuper = false解析

原文地址: http://www.cveoy.top/t/topic/iYVW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录