@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()
方法的行为。
以下是一些常用的属性:
exclude
:用于排除指定字段不参与equals()
和hashCode()
的生成。of
:用于指定哪些字段参与equals()
和hashCode()
的生成,只有这些字段会被考虑。callSuper
:默认为false
,如果设置为true
,生成的equals()
和hashCode()
方法会调用父类的方法。doNotUseGetters
:默认为false
,如果设置为true
,生成的equals()
和hashCode()
方法会直接访问字段,而不使用 getter 方法。
用法
要使用 @EqualsAndHashCode
注解,只需将其添加到类的定义上,如下所示:
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class Person {
private String name;
private int age;
}
在这个示例中,@EqualsAndHashCode
注解被应用于 Person
类,它将自动生成 equals()
和 hashCode()
方法,这些方法将基于 name
和 age
字段进行比较和哈希计算。
你还可以使用注解的属性来自定义生成的方法,例如:
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(exclude = "age")
public class Person {
private String name;
private int age;
}
在这个示例中,age
字段被排除在 equals()
和 hashCode()
的生成之外。
总结
总之,@EqualsAndHashCode
注解是 Lombok 的一项功能,它用于自动生成 Java 类中的 equals()
和 hashCode()
方法,从而简化了对象比较和哈希计算的代码编写。你可以使用注解属性来自定义生成的方法的行为,使其满足你的需求。这个功能的实现是通过编译时注解处理器来完成的,不需要运行时的代码。