gradle build项目时 。。is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type. @Data ^

一、具体警告信息:

:15: 警告: Generating equals/hashCode implementation but without a call
to superclass, even though this class does not extend
java.lang.Object. If this is intentional, add
‘@EqualsAndHashCode(callSuper=false)’ to your type. @Data ^

查了一下才知道@EqualsAndHashCode注解的具体使用原理:
这个注解的作用就是自动的给model bean实现equals方法和hashcode方法。
但是,这个参数,callsuper = false 有问题吗?

二、测试分析
先看下面的测试。

两个model:父类 TV.java 和 子类 小米TV.java,使用这个注解@EqualsAndHashCode(callSuper = false)

gradle build项目时 。。is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type. @Data ^_第1张图片

gradle build项目时 。。is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type. @Data ^_第2张图片

小米tv继承tv,从继承角度讲tv有的属性,小米tv也是有的。

然后看测试main方法:

/**
 * 测试@EqualsAndHashCode注解的使用
 */
public class EqualsAndHashCodeTest {
    public static void main(String[] args) {
        XiaoMiTV tv1 = new XiaoMiTV("123", "lxk", 1L, "白");
        XiaoMiTV tv2 = new XiaoMiTV("456", "sql", 1L, "白");
        System.out.println(tv1.equals(tv2));
    }
}

这个代码的运行结果。true还是false?

来看下运行结果图:
gradle build项目时 。。is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type. @Data ^_第3张图片
这个因为咱在子类里面这么使用@EqualsAndHashCode(callSuper = false) ,不调用父类的属性,那么子类属性里面的相同的话,那hashcode的值就相同啦,所以代码里面的2个tv的equals方法的返回值是true

那么,把@EqualsAndHashCode(callSuper = false) 的false改成true之后的结果呢?

看运行结果(就只改@EqualsAndHashCode(callSuper = false) 里面的false改成true
gradle build项目时 。。is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type. @Data ^_第4张图片

@EqualsAndHashCode(callSuper = true),那就是用自己的属性和从父类继承的属性 来生成hashcode,所以结果为false;

那么,再把@EqualsAndHashCode(callSuper = false) 这个语句注释了呢?这个时候代码运行结果如何?

看下运行结果图:
gradle build项目时 。。is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type. @Data ^_第5张图片

竟然是true,原来他默认就是不管父类继承的属性的。

看Lombok的提示:

自动生成hashcode和equals方法,但是没call super,虽然这个class不是直接extends Object类,如果这是故意的,那么请加上@EqualsAndHashCode(callSuper = false) 这句话到你的model上。

原文链接:https://blog.csdn.net/qq_27093465/article/details/90056695

还有一篇 对使用@EqualsAndHashCode注解影响的总结也挺好,博文链接:
@EqualsAndHashCode注解的影响总结

你可能感兴趣的:(Java)