Lombok关于equals坑

在b站刷到这个视频,于是有了本文章

那么是否真的会呢?

ps:如果是同对象非继承情况下不会(也许会有bug没发现

省流

用@EqualsAndHashCode(callSuper = true)

Lombok会自动为我们生成equals(Object other)和hashCode()方法的实现代码

这边创建两个类(这边是顺手用springtest测试的

Dog类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dog {
    private String name;
    private int age;
}

SmallDog类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class SmallDog extends Dog{
    private String color;

}

测试类

        SmallDog smallDog1 = new SmallDog();
        smallDog1.setName("小狗");
        smallDog1.setAge(1);

        SmallDog smallDog2 = new SmallDog();
        smallDog2.setName("小狗2");
        smallDog2.setAge(1);

//        System.out.println(JSONUtil.toJsonStr(smallDog1));
//        System.out.println(JSONUtil.toJsonStr(smallDog2));
        System.out.println(smallDog1.equals(smallDog2));

结果是确实有坑

如果添加SmallDog的颜色属性呢

这样就不一样了

不用注解,用生成的会怎么样(注意生成的没有重写equals与hashCode

但是dog还是有注解的,如果dog也是生成的会怎么样

依然可以成功判断

用更简单的方法@EqualsAndHashCode(callSuper = true)注解试试(SmallDog类

还原到最初注解时测试


Lombok关于equals坑
http://www.404np.com:8080/archives/1722763603545
作者
北冥有鱼,其名为鲲
发布于
2024年08月04日
更新于
2024年08月04日
许可协议