Administrator
发布于 2025-12-22 / 3 阅读
0

常用Lombok注释

常用Lombok注释

@EqualsAndHashCode(callSuper = true)

@EqualsAndHashCode(callSuper = true) 是 Lombok 库提供的一个注解,用于自动生成 equalshashCode 方法。这个注解的主要作用是简化这些方法的实现,并确保它们在继承层次结构中正确地考虑父类的属性。

详细解释

  1. 生成 equalshashCode 方法

    • @EqualsAndHashCode 注解会自动为类生成 equalshashCode 方法。这些方法对于对象的比较和哈希码计算非常重要,特别是在使用集合(如 HashSetHashMap)时。
  2. callSuper = true 参数

    • callSuper = true 时,Lombok 生成的 equalshashCode 方法不仅会考虑当前类中的字段,还会调用父类的 equalshashCode 方法。
    • 这意味着生成的方法将包括父类的所有字段,从而确保整个继承链上的所有字段都被考虑到。

示例

假设你有一个类继承层次结构如下:

public class Parent {
    private String parentField;

    // 构造函数、getter 和 setter 省略
}

@EqualsAndHashCode(callSuper = true)
public class Child extends Parent {
    private String childField;

    // 构造函数、getter 和 setter 省略
}

在这种情况下,Lombok 会为 Child 类生成如下的 equalshashCode 方法:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false; // 调用父类的 equals 方法
    Child child = (Child) o;
    return Objects.equals(childField, child.childField);
}

@Override
public int hashCode() {
    return Objects.hash(super.hashCode(), childField); // 包括父类的 hashCode
}

使用场景

  • 继承层次结构:当你有一个复杂的继承层次结构,并且希望在比较对象时考虑所有父类的字段时,使用 @EqualsAndHashCode(callSuper = true) 非常有用。
  • 一致性:确保 equalshashCode 方法在整个继承链上保持一致,避免潜在的错误。

注意事项

  • 性能:如果父类有很多字段或者继承层次很深,调用父类的 equalshashCode 方法可能会对性能产生一定影响。因此,在使用 callSuper = true 时需要权衡这一点。
  • 默认行为:如果不指定 callSuper 参数,默认值是 false,这意味着生成的 equalshashCode 方法只会考虑当前类的字段。

通过这种方式,Lombok 帮助开发者简化了 equalshashCode 方法的实现,同时确保了继承层次结构中的字段被正确处理。