@EqualsAndHashCode()
时间: 2024-01-23 19:14:52 浏览: 96
详解hashCode()和equals()的本质区别和联系
@EqualsAndHashCode()是一个注解,用于在Java中生成equals()和hashCode()方法。它可以自动生成基于类的属性的比较逻辑,从而简化了代码编写过程。
以下是@EqualsAndHashCode()的一些常见用法:
1. 默认用法:不指定任何属性,默认情况下,@EqualsAndHashCode()会使用非静态、非瞬态的所有属性来生成equals()和hashCode()方法。
2. 指定callSuper属性:通过设置callSuper属性为true,可以在子类中使用父类的属性来生成equals()和hashCode()方法。
3. 指定exclude属性:通过设置exclude属性,可以排除某些属性不参与equals()和hashCode()方法的生成。
4. 指定of属性:通过设置of属性,可以指定只使用某些属性来生成equals()和hashCode()方法。
下面是一个示例代码,演示了@EqualsAndHashCode()的用法:
```java
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true, exclude = "weight")
class Animal {
private String name;
private int weight;
}
@EqualsAndHashCode(callSuper = true, of = "name")
class Cat extends Animal {
private String color;
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Animal();
animal1.setName("Tom");
animal1.setWeight(10);
Animal animal2 = new Animal();
animal2.setName("Tom");
animal2.setWeight(20);
Cat cat1 = new Cat();
cat1.setName("Tom");
cat1.setColor("Black");
Cat cat2 = new Cat();
cat2.setName("Jerry");
cat2.setColor("White");
System.out.println(animal1.equals(animal2)); // 输出:false
System.out.println(cat1.equals(cat2)); // 输出:false
}
}
```
在上面的示例中,Animal类和Cat类都使用了@EqualsAndHashCode()注解。Animal类使用了exclude属性排除了weight字段,而Cat类使用了of属性指定了只使用name字段。通过调用equals()方法,我们可以看到不同情况下的比较结果。
阅读全文