04. Lombok-对象匹配@EqualsAndHashCode注解

159 阅读1分钟

04. Lombok-对象匹配@EqualsAndHashCode注解

当我们在UserDao实体类中,写了如下注解

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString

还缺一个自动生成equals和hashCode的注解

@EqualsAndHashCode注解 作用于类,覆盖默认的equals和hashCode,作用于全部的属性

我们如果不使用@EqualsAndHashCode注解,我们一般采取这样的方式写UserDao实体类:

package com.lzh.dao;

import lombok.*;

import java.util.Objects;

/**
 * @Author:kaiyang.cui
 * @Package:com.lzh.dao
 * @Project:1024shop-manager
 * @name:UserDao
 * @Date:2023/3/29 下午7:44
 * @Filename:UserDao
 * @Description:UserDao
 * @Version:1.0
 */
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class UserDao {
    private int id;
    private String name;
    private int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        UserDao userDao = (UserDao) o;
        return id == userDao.id &&
                age == userDao.age &&
                Objects.equals(name, userDao.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, age);
    }
}

现在我们使用@EqualsAndHashCode注解来自动生成equals和hashCode代码:

package com.lzh.dao;

import lombok.*;

/**
 * @Author:kaiyang.cui
 * @Package:com.lzh.dao
 * @Project:1024shop-manager
 * @name:UserDao
 * @Date:2023/3/29 下午7:44
 * @Filename:UserDao
 * @Description:UserDao
 * @Version:1.0
 */
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class UserDao {
    private int id;
    private String name;
    private int age;
}

在我们编译mvn compile好UserDao实体类后发现,Lombok的@EqualsAndHashCode注解写的equals和hashCode写的比较复杂,但是没有关系,我们直接使用就可以了:

image.png

注意⚠️

@EqualsAndHashCode注解 作用于类,覆盖默认的equals和hashCode,作用于全部的属性

不包括某个属性:

@EqualsAndHashCode(exclude={"age"})

只输出某个属性:

@EqualsAndHashCode(of={"name"})

好了,这期就到这里,我们下期再见。