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写的比较复杂,但是没有关系,我们直接使用就可以了:
注意⚠️
@EqualsAndHashCode注解 作用于类,覆盖默认的equals和hashCode,作用于全部的属性
不包括某个属性:
@EqualsAndHashCode(exclude={"age"})
只输出某个属性:
@EqualsAndHashCode(of={"name"})
好了,这期就到这里,我们下期再见。