lombok

大幅度缩减代码的编写量。

@Builder 与序列化的冲突

有时候使用 @Builder,此注解默认会使得无参构造器私有化。

然而 json 反序列化的时候,需要无参构造器。

如下使用即可

  [java]
1
2
3
4
5
6
7
8
@Data @Builder public class OutNotifyCbMessage implements Serializable { @Tolerate public OutNotifyCbMessage() { } }

当存在继承时

当子类继承父类的时候,想使用父类中的字段,应该如何使用?

定义

  [java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@AllArgsConstructor public class Parent { private String a; } public class Child extends Parent { private String b; @Builder private Child(String a, String b){ super(a); this.b = b; } }

使用

  [java]
1
Child.builder().a("testA").b("testB").build();

拓展使用

lombok 拓展

maven 编译报错

报错信息

现象:idea 测试方法可以正常执行,但是 mvn clean install 程序报错

报错如下:

  [plaintext]
1
2
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project poseidon: C ompilation failure: Compilation failure:

排查过程

(1)idea annotation 已启动,排除

(2)maven 插件已是最新版本,排除版本低的问题

(3)并没有其他 lombok 的导入冲突。

问题解决

最后发现是 maven 编译插件的配置

  [xml]
1
2
3
4
5
6
<configuration> <source>${project.compiler.level}</source> <target>${project.compiler.level}</target> <encoding>${project.build.sourceEncoding}</encoding> <compilerArgument>-proc:none</compilerArgument> </configuration>

<compilerArgument>-proc:none</compilerArgument> 这句话会导致 lombok 相关的注解无法生效。

注释掉即可。

参考资料

官网所有特性

继承父类时的写法