@EqualsAndHashCode(callSuper = true)的作用
时间: 2024-04-08 09:26:39 浏览: 186
java中lombok的@Data引发问题详解
5星 · 资源好评率100%
@EqualsAndHashCode(callSuper = true) 是一个Java注解,用于在子类中自动生成 equals 和 hashCode 方法,并考虑到了父类的成员变量[^1]。如果使用了 @EqualsAndHashCode(callSuper = true),在生成 equals 和 hashCode 方法时,会同时考虑到子类和父类的成员变量。这个注解通常与一些Java库(如Lombok)一起使用,以简化代码,同时确保正确生成 equals 和 hashCode 方法,从而保证在集合类(如HashSet,HashMap等)中正确地工作。
范例:假设有一个父类Person和一个子类Student,其中Person类有name和age字段,Student类有studentId字段。如果在Student类上使用了@EqualsAndHashCode(callSuper = true),那么生成的equals和hashCode方法会同时考虑到Student类和Person类的字段。
```java
public class Person {
private String name;
private int age;
// 省略构造方法和其他方法
// 自动生成的equals和hashCode方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
public class Student extends Person {
private int studentId;
// 省略构造方法和其他方法
// 自动生成的equals和hashCode方法
@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;
Student student = (Student) o;
return studentId == student.studentId;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), studentId);
}
}
```
这样,在使用HashSet、HashMap等集合类时,可以正确地比较和存储Student对象,同时考虑到了父类Person的字段。
阅读全文