@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文件

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在 jQuery 中,可以使用以下方法来获取父类窗口的属性: 1. 在子类弹窗中使用父类窗口的选择器来获取属性,例如: ``` class Parent { constructor() { this.attribute = "父类属性"; this.child_window = new Child(); } } class Child { constructor() { this.get_attribute(); } get_attribute() { let attribute = $(window.parent.document).find("#parent_window_id").data("attribute"); console.log(attribute); } } ``` 在这个例子中,子类弹窗 Child 在初始化时调用 get_attribute 方法,该方法使用父类窗口的选择器 $(window.parent.document).find("#parent_window_id") 来获取父类窗口的某个元素,然后使用 jQuery 的 data 方法来获取该元素的 data 属性,从而获得父类窗口的属性值。 2. 在父类窗口中将属性值保存在 cookie 中,子类弹窗中读取 cookie 来获取属性值,例如: ``` class Parent { constructor() { this.attribute = "父类属性"; document.cookie = "attribute=" + this.attribute; this.child_window = new Child(); } } class Child { constructor() { this.get_attribute(); } get_attribute() { let attribute = document.cookie.replace(/(?:(?:^|.*;\s*)attribute\s*\=\s*([^;]*).*$)|^.*$/, "$1"); console.log(attribute); } } ``` 在这个例子中,父类窗口在初始化时把属性值保存在 cookie 中,子类弹窗在初始化时调用 get_attribute 方法,该方法使用 JavaScript 的 document.cookie 属性获取 cookie,然后使用正则表达式来从 cookie 字符串中提取属性值,从而获得父类窗口的属性值。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金斗潼关

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值