繁体   English   中英

如何在默认构造函数中使用 lombok

[英]How to use lombok with default constructor

我的 AssignedPropertiesDTO 类是:

@Data
@Builder
@AllArgsConstructor
public class AssignedPropertiesDTO {

  @JsonProperty("hotel_id")
  private Long hotelId;

  @JsonProperty("oyo_id")
  private String oyoId;

  @JsonProperty("drn")
  private Integer dsrn;

  @JsonProperty("is_sold_out")
  private Boolean isSoldOut;

  @JsonProperty("is_purged")
  private Boolean isPurged;

  AssignedPropertiesDTO() {
    this.isSoldOut = false;
    this.isPurged = false;
  }

}

我需要将 isSoldOut 和 isPurged 设置为 false。 这就是我创建默认构造函数的原因。 但是我使用 Builder() 来设置类字段,而在某处只是使用 getter/setter 设置属性。

  AssignedPropertiesDTO matchingObject = assignedPropertiesDTOS.stream()
      .filter(assignedPropertiesDTO ->
          assignedPropertiesDTO.getHotelId().equals(Long.valueOf(entry.getKey())))
      .findFirst().orElse(null);
  if (matchingObject == null) {
    assignedPropertiesDTOS.add(AssignedPropertiesDTO
        .builder().hotelId(Long.valueOf(entry.getKey())).dsrn(count).build());
  } else {
    matchingObject.setDsrn(count);
  }

我的要求是将 Ispurged/IsSoldOut 设置为 True/False 但不是 NULL。

[      {
                "hotel_id": 45693,
                "oyo_id": "GOA2161",
                "drn": null,
                "is_sold_out": null,
                "is_purged": null
            },
            {
                "hotel_id": 45693,
                "oyo_id": "GOA2161",
                "drn": null,
                "is_sold_out": true,
                "is_purged": false
            } ]

请指导我如何做到这一点。

@Builder为您制作了一个全参数构造函数; 它不知道 isSoldOut 和 isPurged 所需的非默认值。 您可以@Builder.Default使用@Builder.Default功能: @Builder.Default private Boolean isSoldOut = false; 例如。

或者,只需将它们设为小写 b 布尔值,'false' 现在是自然默认值。 如果这是一个选项,那么它是迄今为止最好的解决方案。

您的最后一个选择是自己制作全参数构造函数。

当您将isPurgedisSoldOut定义为boolean而不是Boolean ,默认情况下变量将初始化为false (根据您的构造函数)。

如果您需要另一个初始化,您可以在声明变量时简单地定义它,例如将一个设置为 true,另一个设置为 false:

Data
@Builder
@AllArgsConstructor
public class AssignedPropertiesDTO {

  @JsonProperty("is_sold_out")
  private boolean isSoldOut = true;

  @JsonProperty("is_purged")
  private boolean isPurged = false;
}

您是否尝试使用默认值分配布尔值? 值得注意的是,布尔值默认值为 false。 另外,使用布尔值而不是布尔值,这样它就不能支持空值。

在一个不相关的注释中,您通常不会给出以“is”开头的布尔值名称。 这通常留给访问者。

@JsonProperty("sold_out")
private boolean soldOut;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM