@EqualsAndHashCode(callSuper = true)
时间: 2023-10-25 14:35:00 浏览: 76
@AndHashCode(callSuper = true) 是一个注解,用于生成 equals(Object other) 和 hashCode() 方法的实现,同时也包括父类的属性。如果不使用 callSuper=true,那么生成的 equals() 和 hashCode() 方法只会考虑当前类的属性,而不会考虑父类的属性。因此,当我们需要考虑父类的属性时,需要使用 @EqualsAndHashCode(callSuper = true)。在使用该注解时,需要确保父类的属性已经正确地实现了 equals() 和 hashCode() 方法。
相关问题
@EqualsAndHashCode(callSuper = true
对于Java中的`@EqualsAndHashCode(callSuper = true)`注解,它用于生成`equals()`和`hashCode()`方法,以及继承自父类的字段。
当我们在一个子类中使用`@EqualsAndHashCode(callSuper = true)`注解时,它将会在生成的方法中包含父类的字段,以确保父类中定义的字段也被考虑在内。
这个注解可以很方便地在子类中实现对象的相等性比较和哈希码计算。
@EqualsAndHashCode(callSuper = true) @ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)注解用于子类对象之间进行比较的时候,equals和hashcode将父类对象属性算进去,根据父类和子类共同的属性去比较。而@ToString(callSuper = true)注解则是将父类中的属性也算到toString中。
举个例子,假设有一个父类Person和一个子类Student,它继承了Person类。Person类中有两个属性:name和age。Student类中有一个属性:score。如果我们在Student类中使用@EqualsAndHashCode(callSuper = true)和@ToString(callSuper = true)注解,那么在比较两个Student对象时,会将父类Person中的name和age属性也算进去。在调用toString方法时,也会将父类中的属性一并输出。
示例代码如下:
```java
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
class Person {
private String name;
private int age;
}
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
class Student extends Person {
private int score;
}
public class Test {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("Tom");
s1.setAge(18);
s1.setScore(90);
Student s2 = new Student();
s2.setName("Tom");
s2.setAge(18);
s2.setScore(90);
System.out.println(s1.equals(s2)); // 输出:true
System.out.println(s1.toString()); // 输出:Student(super=Person(name=Tom, age=18), score=90)
}
}
```
阅读全文