@Data加在子类上,子类无法获取父类的属性

1、问题描述

我的子类继承父类,并在子类上加了@Data注解。但在程序运行时,输出的结果只有我在子类中定义的属性,父类的属性没有输出。

这是我定义的子类:

这个是子类继承的父类:

这个是输出结果:

可以看到,只输出了子类的定义的taskId,父类的属性全无!!!

 

2、产生原因

@Data是会在编译时自动为实体类添加@Getter @Setter toString等方法

我看了一下编译好的.class文件

 @Data注解修饰的TaskBO类生成的toString()方法只有子类中的taskId,因此输出结果没有父类属性,只有taskId。

我看官方文档对于@Data这个注解的说明中并没有说@Data可以作用于类的父类。

@Data的作用域仅局限于当前类的属性。

3、解决方法

添加@ToString(callSuper = true)

 

 callSuper会把父类的属性作为一部分连同子类的属性一块生成toString

即:

 

4、总结

5、参考资料

lombok的使用和原理 - 张随笔 - 博客园 (cnblogs.com)

@Data注解不会涉父类的成员的坑,需要加callSuper = true的参数_沙漏-CSDN博客_callsuper=false

关于注解@Data和@ToString(callSuper = true) - 楼子湾 - 博客园 

Java里面classes文件的理解_mll999888的专栏-CSDN博客_classes文件 

posted @ 2022-07-03 20:36  WuLinkedList++  阅读(524)  评论(0编辑  收藏  举报