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

 更新时间:2024年11月05日 14:19:28   作者:文迢  
在Java开发中,使用Lombok库的@Data注解简化了代码,但在父子类继承关系中使用@Data注解时会遇到问题,主要问题是:当父类和子类都使用@Data注解时,会导致equals方法不对称,解决方案是在子类中使用@EqualsAndHashCode注解

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java设计模式之策略模式原理与用法实例详解

    Java设计模式之策略模式原理与用法实例详解

    这篇文章主要介绍了Java设计模式之策略模式原理与用法,结合实例形式较为详细的分析了Java策略模式的概念、原理、定义及使用方法,并总结了相关的优缺点,具有一定参考借鉴价值,需要的朋友可以参考下
    2018-04-04
  • SpringBoot整合rabbitMq自定义消息转换方式

    SpringBoot整合rabbitMq自定义消息转换方式

    这篇文章主要介绍了SpringBoot整合rabbitMq自定义消息转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • idea中maven本地仓库jar包打包失败和无法引用的问题解决

    idea中maven本地仓库jar包打包失败和无法引用的问题解决

    本文主要介绍了idea中maven本地仓库jar包打包失败和无法引用的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java中的CompletableFuture详解

    Java中的CompletableFuture详解

    这篇文章主要介绍了Java中的CompletableFuture详解,Future接口(FutueTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消任务的执行、判断任务是否被取消、判断任务执行是否完毕等,需要的朋友可以参考下
    2023-09-09
  • 深入了解SpringMVC初始化流程

    深入了解SpringMVC初始化流程

    框架源码是我们 Coding 晋级中的必修课,SSM 应该算是小伙伴们日常接触最多的框架了,这其中 SpringMVC 初始化流程相对来说要简单一些,因此本文就先来和大家分析一下 SpringMVC 初始化流程
    2022-07-07
  • SpringBoot整合SpringCloud的过程详解

    SpringBoot整合SpringCloud的过程详解

    SpringCloud专注于为典型的用例和扩展机制提供良好的开箱即用体验,在介绍SpringCloud默认使用的注册中心前,先给大家介绍下分布式系统的三个指标,具体内容详情跟随小编一起看看吧
    2021-09-09
  • java如何创建普通二叉树

    java如何创建普通二叉树

    这篇文章主要介绍了java如何创建普通二叉树的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java GUI插入图片不显示问题解决方法

    Java GUI插入图片不显示问题解决方法

    大家好,本篇文章主要讲的是Java GUI插入图片不显示问题解决方法,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • Java实现NIO聊天室的示例代码(群聊+私聊)

    Java实现NIO聊天室的示例代码(群聊+私聊)

    这篇文章主要介绍了Java实现NIO聊天室的示例代码(群聊+私聊),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • springBoot集成flowable的流程解析

    springBoot集成flowable的流程解析

    这篇文章主要介绍了springBoot集成flowable的流程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02

最新评论