开发者

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

目录
  • @编程客栈Data注解js父子类继承问题
    • 解决方案
  • 子类加@Data后,IDEjavascriptA调试时“出现”父类属性无值
    • 项目场景
    • 问题描述
    • 原因分析
    • 解决方案
  • 总结

    @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查看对js象内容,发现加了@Data的返回子类型中父类的属性没有出现。

    问题描述

    // 父类Response中的返回VO对象
     
    @Data
    public class PVO{
     
        privaphpte 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)

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜