当前位置: 代码网 > it编程>编程语言>Java > 解读@Data注解父子类继承的问题

解读@Data注解父子类继承的问题

2024年11月05日 Java 我要评论
@data注解父子类继承问题父类子类都使用@data注解的时候会导致:equals方法在父类中重写equals,可能不是对称的。问题。解决方案子类的注解添加以下@data@tostring(calls

@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)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com