Lombok fluent 如下,若
@Setter
@Getter
@Accessors(fluent = true)
String str;
则
public String str(){
return this.str;
}
public SomeClass str(String str){
this.str = str;
}
用起来很方便,但之前因为 Jackson 不支持的原因,只是小范围内部类中使用,然而今天一个内部类也需要 JSON 序列化,还是碰到一起了。
搜了一个小时,无解。 @Builder 只能解决 setter 方向,而且二者并不相容。见下面
// @Builder 的用法
SomeClass.builer().str("xxx").a("xxx").b("xxx").build();
// fluent 的用法
new SomeClass().str("xxx").a("xxx").b("xxx");
// 另外,Builder 是专门用于不可变类的,fluent 不要求不可变
我现在对 Lombok fluent=true 的用法产生怀疑了,貌似除了 Lombok 试验了它,没有其它框架、工具,或人来提到它。
1
Belmode 2019-03-12 15:14:03 +08:00 via Android
基本不用 lombok,宁愿舍弃这种便利性。
|
2
GM 2019-03-12 15:30:10 +08:00
说了半天,就是没说问题到底是什么?到底是哪里无解?什么地方冲突了?
|
3
wfd0807 2019-03-12 15:41:46 +08:00
基本不用 lombok +10086
|
4
wanghaa 2019-03-12 15:46:42 +08:00
这种生成的不是标准的 java bean 结构,一般都是不推荐用,这个是省略掉 get set 前缀,如果想链式访问构造对象推荐用这个注解的另一个属性 chain=true
// chain 的用法 new SomeClass().setStr("xxx").setA("xxx").setB("xxx"); |
5
feiyuanqiu 2019-03-12 15:57:47 +08:00
给每个字段加 @JsonProperty 注解吧
|
6
foutin 2019-03-12 15:57:50 +08:00
|
7
passerbytiny OP @wanghaa #4 这种情况只能临时解决,java bean 这种必须有 Getter、Setter 的规范,已经越来越撑不住了
@feiyuanqiu #5 这个不管用,它只能解决名称不同,不能解决没有 Getter、Setter @foutin #6 不是这个 |
8
wc951 2019-03-12 16:10:38 +08:00 via Android
这种实验性注解不敢瞎用
|
9
micean 2019-03-12 16:19:38 +08:00
换 gson^_^
|
10
micean 2019-03-12 16:20:29 +08:00
|
11
gz911122 2019-03-12 16:52:58 +08:00
gson 应该是可以的
|
12
feiyuanqiu 2019-03-12 16:55:26 +08:00 1
@passerbytiny #7
|
13
BBCCBB 2019-03-12 16:55:36 +08:00
@Accessors(fluent = true)
那就不要用这个特性吧,jackson 需要使用字段的 get,set 方法来处理字段 |
14
notreami 2019-03-12 17:01:53 +08:00
不用 lombok,是什么鬼?难道还在 jdk1.5 ??
|
15
samples 2019-03-12 17:04:52 +08:00
@feiyuanqiu 这个圣光主题......
|
16
passerbytiny OP @feiyuanqiu #12 多谢测试,看来 Jackson 在设置读取值的时候回做兼容性处理,只不过在决定有哪些字段的时候只认 Getter、Setter,或 Builder。
|
17
liaojl 2019-03-12 19:32:35 +08:00 via Android
标题已经说了“不要涉及该不该用 Lombok ”,评论区里还一堆人说不要用 lombok🌚
|
18
yujunhao8831 2019-03-12 19:58:01 +08:00
|
19
lidfather 2019-03-12 21:15:34 +08:00 via Android
确实没什么好用的,还得安装插件
|
21
CamD 2020-07-02 14:16:56 +08:00
idea 自动生成 setter,getter 不也就解决了,而且肯定兼容需要调用 setter,getter 的地方
|