c语言编程笔录

首页 >   > 笔记大全

笔记大全

Lombok中EqualsAndHashCode注解如何使用

更新时间:2023-11-15

什么是Lombok中的@EqualsAndHashCode注解

Lombok是一个Java库,它可以根据类定义自动生成代码。 @EqualsAndHashCode是Lombok提供的一种注解,是用于自动生成 equals 和 hashCode 方法代码的注解。以前程序员手动编写的 equals 和 hashCode 方法只是进行了属性值的比较,如果属性值都相等,那么对象才算是相等的,而有了@EqualsAndHashCode注解,则可以使用注解来自动生成equals 和 hashCode方法的代码,从而简化了开发人员的工作。

//创建Java类并添加注解
import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Student {
    private int id;
    private String name;  
    private String sex;

    // 构造方法、getter、setter 省略
}

如何使用Lombok中的@EqualsAndHashCode注解

使用@EqualsAndHashCode注解非常简单,只需要在Java类中使用即可,使用属性exclude可以指定不参与hashCode和equals比较的属性

import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@EqualsAndHashCode(exclude = {"specialId"}) 
public class Student {
    private int id;
    private String name;
    private String sex;
    private int specialId;
    
    //构造方法、getter、setter省略
}

Lombok中@EqualsAndHashCode注解的使用示例

接下来我们用一个例子来展示如何使用Lombok中@EqualsAndHashCode注解,并调用equals和hashCode方法

@Data
@EqualsAndHashCode(exclude = {"specialId"}) 
public class Student {
    private int id;
    private String name;
    private String sex;
    private int specialId;
    
    //构造方法、getter、setter省略
}

public class TestStudent {
    @Test public void testStudent() {
        // 实例化两个学生对象
        Student stu1 = new Student(1, "张三", "男", 1001);
        Student stu2 = new Student(1, "张三", "男", 1002);
        
        System.out.println("stu1 hashCode:" + stu1.hashCode()); // 337
        System.out.println("stu2 hashCode:" + stu2.hashCode()); // 1277
        
        System.out.println("stu1 equals stu2: " + stu1.equals(stu2)); // false
        
        Student stu3 = new Student(1, "张三", "男", 1002);
        System.out.println("stu2 equals stu3: " + stu2.equals(stu3)); // true
    }
}

总结

@EqualsAndHashCode注解是Lombok中用于自动生成equals 和 hashCode 方法代码的注解。可以减少开发人员编写这些方法的工作量,同时简化代码。在使用过程中,我们也可以使用exclude属性,用于指定不参与hashCode和equals比较的属性。