@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 @   WuLinkedList++  阅读(860)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示