代码之家  ›  专栏  ›  技术社区  ›  Aymen Kanzari

具有公共无args构造函数的Lombok@Value

  •  0
  • Aymen Kanzari  · 技术社区  · 2 年前

    我有下面的 Occurrence 课上,我添加了 @Value 注释使其不可变,并且我将extraPrivate设置为true for以添加一个private无args构造函数。

    @Builder
    @Value
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    public class Occurrence {
      .....
    }
    

    lombok.config

    config.stopBubbling = true
    lombok.getter.noIsPrefix = true
    lombok.noArgsConstructor.extraPrivate = true
    

    有没有办法添加 公共无参数构造函数 ?

    1 回复  |  直到 2 年前
        1
  •  0
  •   Sweeper    2 年前

    你应该注释类 @NoArgsConstructor(force = true) .仅使用 @NoArgsConstructor 将导致编译器错误,因为 @Value 使字段成为最终字段。

    来自 documentation

    @NoArgsConstructor 将生成一个没有参数的构造函数。如果这不可能(因为最终字段),则会导致编译器错误,除非 @NoArgsConstructor(force=true) 则使用0/false/null初始化所有最终字段。

    还要注意:

    对于具有约束的字段,例如 @NonNull 字段,则不会生成任何检查,因此请注意,在稍后正确初始化这些字段之前,这些约束通常不会得到满足。

        2
  •  -1
  •   inkredusk    2 年前

    据我所知,龙目 @NoArgsConstructor 将生成 no arguments/default constructor ,默认情况下生成的构造函数将 public

    @NoArgsConstructor
    public class NoArgsDemo {
    
      private Long id; 
      private String username;
    }
    

    从文档中,

    @NoArgsConstructor将生成一个不带参数的构造函数。如果这不可能(因为最终字段),则将导致编译器错误,除非使用@NoArgsConstructor(force=true),否则所有最终字段都将用0/false/null初始化。

    参考链接: Lombok NoArgsConstructor