java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > @Data注解父子类继承问题

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

作者:文迢

在Java开发中,使用Lombok库的@Data注解简化了代码,但在父子类继承关系中使用@Data注解时会遇到问题,主要问题是:当父类和子类都使用@Data注解时,会导致equals方法不对称,解决方案是在子类中使用@EqualsAndHashCode注解

@Data注解父子类继承问题

父类子类都使用@Data注解的时候会导致:equals方法在父类中重写equals,可能不是对称的。问题。

解决方案

子类的注解添加以下

@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)

使用@Data时默认@equalsandhashcode的状态为callsuper=false

子类加@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)

总结

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

您可能感兴趣的文章:
阅读全文