lombok

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

@Builder 与序列化的冲突

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

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

如下使用即可

@Data
@Builder
public class OutNotifyCbMessage implements Serializable {

    @Tolerate
    public OutNotifyCbMessage() {
    }
}

当存在继承时

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

定义

@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;
  }
}

使用

Child.builder().a("testA").b("testB").build();

拓展使用

lombok 拓展

maven 编译报错

报错信息

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

报错如下:

[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 编译插件的配置

<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 相关的注解无法生效。

注释掉即可。

参考资料

官网所有特性

继承父类时的写法