关于使用 @Accessor(chain=true) 遇到的问题 (子类继承父类 不能重写父类的set方法)

平时喜欢使用这个注解, 因为链式的set 主要是因为方便美观.
今天在开发中因为父类新增了一个@Accessor(chain=true) 但是子类没有使用, 导致原本可以编译通过的老代码 现在编译错误, 提示“子类 不能覆盖 父类的 *** 字段”.
查了一下 原因是: 编译之后的set方法 默认为 返回set了字段值之后的对象, 而不是通常@setter对应的 void方法.
建议 在合适的场景使用@Accessor(chain=true).

见图:
在这里插入图片描述

感兴趣的可以看下这个博文: https://www.debugger.wiki/article/html/1573112792320496

@Accessor是Lombok库中的一个注解,用于控制Java类的访问器方法的生成方式。根据提供的引用内容,有两个常见的@Accessor选项:fluent和chain。 当使用@Accessors(fluent = true)注解时,不需要使用set和get前缀来为对象赋值和取值。例如,在一个使用@Data和@Accessors(fluent = true)注解的User类中,可以通过链式编程的方式直接为对象的属性赋值,而无需使用set前缀。示例代码如下: ```java @Data @Accessors(fluent = true) public class User implements Serializable { private String id; private String name; private int age; public static void main(String[] args) { User user = new User(); user.name("aaa").age(18); System.out.println(user); } } ``` 另一方面,当使用@Accessors(chain = true)注解时,setter方法将返回当前对象本身,从而实现链式编程。例如,在一个使用@Data和@Accessors(chain = true)注解的User类中,可以通过链式编程的方式为对象的属性赋值,并且连续调用多个setter方法。示例代码如下: ```java @Data @Accessors(chain = true) public class User implements Serializable { private String id; private String name; private int age; public static void main(String[] args) { User user = new User(); user.setId("123").setAge(17).setName("小明"); System.out.println(user); } } ``` 总结起来,@Accessors注解可以用于控制生成访问器方法的方式,通过设置fluent为true可以省略set和get前缀,在链式编程中使用chain=true可以让setter方法返回当前对象本身。这些注解可以提高代码的可读性和简洁性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值