lombok——@EqualsAndHashCode(callSuper = true)注解的和exclude使用

  • 此注解会生成equals(Object other) 和 hashCode()方法。
  • 它默认使用非静态,非瞬态的属性
  • 可通过参数exclude排除一些属性
  • 可通过参数of指定仅使用哪些属性
  • 它默认仅使用该类中定义的属性且不调用父类的方法

实现equals, hashCode方法是在编程生活中再常见不过的一个东西了,那么自然@EqualsAndHashCode 这个annotation就成为了一个非常方便的工具。默认情况下,被这个annotation标注的class会用到除了 static,transient修饰的所有属性作为判断标准,当然和之前的annotation一样,可是使用exclude选项除掉不想要的属性。也可以通过callSuper包含父类的equals 和 hashCode。 当然如果你的class 没有继承任何其他的class,你却写了callSuper,那么会收获一个编译报错。

@EqualsAndHashCode(callSuper = true)
该注解用于子类对象之间进行比较的时候

不加该注解的影响:子类对象属性值一致,但其继承的父类对象属性值不一致,在比较的时候会出现比较结果不对的情况。
1.
假如父类有个code属性 子类有个name属性
然后创建两个子类对象 子类的name值都一样 code值不一样
此时两个子类equals 则返回的是true

2.如果父类加上了@EqualsAndHashCode(callSuper = true)
假如父类有个code属性 子类有个name属性
然后创建两个子类对象 子类的name值都一样 code值不一样
此时两个子类equals 则返回的是false

posted @ 2022-06-27 10:51  菜鸟辉哥  阅读(1570)  评论(0编辑  收藏  举报