Lombok 基础

Lombok 基本注解

Lombok 高级注解

Lombok FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/lombok-annotation-equalsandhashcode.html

Lombok @EqualsAndHashCode 注解深入理解


@EqualsAndHashCode 注解用于自动生成 equals()hashCode() 方法。

Lombok 的原理是通过编译时注解处理器来实现的。当你使用 @EqualsAndHashCode 注解时,编译器会在编译过程中检测到这个注解,并生成对应的 equals()hashCode() 方法的代码。这样,你就不需要手动编写这些方法,而是让 Lombok 自动生成。

@EqualsAndHashCode 注解

@EqualsAndHashCode 是 Lombok 提供的一个注解,用于自动生成 Java 类中的 equals()hashCode() 方法,以便比较对象的内容是否相等和生成哈希码。

源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface EqualsAndHashCode {

	String[] exclude() default {};

	String[] of() default {};

	boolean callSuper() default false;

	boolean doNotUseGetters() default false;

	CacheStrategy cacheStrategy() default CacheStrategy.NEVER;

	AnyAnnotation[] onParam() default {};

	@Deprecated
	@Retention(RetentionPolicy.SOURCE)
	@Target({})
	@interface AnyAnnotation {}

	boolean onlyExplicitlyIncluded() default false;

	@Target(ElementType.FIELD)
	@Retention(RetentionPolicy.SOURCE)
	public @interface Exclude {}

	@Target({ElementType.FIELD, ElementType.METHOD})
	@Retention(RetentionPolicy.SOURCE)
	public @interface Include {

		String replaces() default "";

		int rank() default 0;
	}

	public enum CacheStrategy {

		NEVER,

		LAZY
	}
}

作用

@EqualsAndHashCode 的主要作用是简化 Java 类的编写,特别是在需要比较对象内容或使用对象作为 Map 的键时,自动生成 equals()hashCode() 方法可以减少样板代码的编写。

注解属性

@EqualsAndHashCode 注解有一些属性,可以用来自定义生成的 equals()hashCode() 方法的行为。

以下是一些常用的属性:

  1. exclude :用于排除指定字段不参与 equals()hashCode() 的生成。
  2. of :用于指定哪些字段参与 equals()hashCode() 的生成,只有这些字段会被考虑。
  3. callSuper :默认为 false,如果设置为 true,生成的 equals()hashCode() 方法会调用父类的方法。
  4. doNotUseGetters :默认为 false,如果设置为 true,生成的 equals()hashCode() 方法会直接访问字段,而不使用 getter 方法。

用法

要使用 @EqualsAndHashCode 注解,只需将其添加到类的定义上,如下所示:

import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Person {
    private String name;
    private int age;
}

在这个示例中,@EqualsAndHashCode 注解被应用于 Person 类,它将自动生成 equals()hashCode() 方法,这些方法将基于 nameage 字段进行比较和哈希计算。

你还可以使用注解的属性来自定义生成的方法,例如:

import lombok.EqualsAndHashCode;

@EqualsAndHashCode(exclude = "age")
public class Person {
    private String name;
    private int age;
}

在这个示例中,age 字段被排除在 equals()hashCode() 的生成之外。

总结

总之,@EqualsAndHashCode 注解是 Lombok 的一项功能,它用于自动生成 Java 类中的 equals()hashCode() 方法,从而简化了对象比较和哈希计算的代码编写。你可以使用注解属性来自定义生成的方法的行为,使其满足你的需求。这个功能的实现是通过编译时注解处理器来完成的,不需要运行时的代码。