解读@Data注解父子类继承的问题
@Data注解父子类继承问题
父类子类都使用@Data注解的时候会导致:equals方法在父类中重写equals,可能不是对称的。问题。
解决方案
子类的注解添加以下
@Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true)
使用@Data时默认@equalsandhashcode的状态为callsuper=false
- @equalsandhashcode(callsuper=false)表达为在对象比较时不会考虑父类中的成员,仅仅比较子类中的属性就判断是否相同
- @equalsandhashcode(callsuper=true)在比较时会考虑父类中的成员,通过父类和子类中的属性一起判断是否相同
子类加@Data后,IDEA调试时“出现”父类属性无值
项目场景
自测一个功能的时候,IDEA调试同过对象的VIEW查看对象内容,发现加了@Data的返回子类型中父类的属性没有出现。
问题描述
// 父类Response中的返回VO对象
@Data
public class PVO{
private Sting serialNum;
}
// 子类拓展了父类属性
@Data
public class SVO extends PVO{
private Sting userName;
}接口返回对象为SVO,在debug代码过程中同过代码点击VIEW的时候查看对象内容,这时候没有“出现”父类的属性。
原因分析
其实同过VIEW的查看对象内容是根据对象的toString()方法展示的,在子类和父类都使用了@Data注解时,子类toString以及equal和toHash都不会将父类的属性带入进来,导致同过VIEW的时候不会出现父类的方法。
解决方案
1、调试的时候在IDEA控制台查看对象的属性值是准确的;
2、如果非要使用VIEW查看的话,在子类加上如下注解,这样就会引入父类方法。
@ToString(callSuper = true)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
springboot集成shiro遭遇自定义filter异常的解决
这篇文章主要介绍了springboot集成shiro遭遇自定义filter异常的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11
Java中的==、equals与hashCode区别与联系最佳实践
在Java开发中,==、equals和hashCode是三个高频出现的概念,也是初学者最容易混淆的知识点,本文将从底层原理出发,全面解析三者的区别、联系及最佳实践,帮你彻底理清它们的使用场景,感兴趣的朋友一起看看吧2025-09-09
关于使用Mybatisplus自带的selectById和insert方法时的一些问题
这篇文章主要介绍了关于使用Mybatisplus自带的selectById和insert方法时的一些问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08


最新评论