当前位置: 首页 > 知识库问答 >
问题:

如何将lombok与默认构造函数一起使用

应俭
2023-03-14

我分配给类的属性是:

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

}

我需要设置ISSOLD,并敦促其设置为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);
  }

我的要求是将isPurpressed/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
            } ]

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

共有3个答案

蒋何平
2023-03-14

当您将ispupped定义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;
}
鱼意远
2023-03-14

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

在一个不相关的注释中,你通常不会给以is开头的布尔值命名。这通常留给访问器。

@JsonProperty("sold_out")
private boolean soldOut;
米俊喆
2023-03-14

@Builder为您创建一个全参数构造函数;它不知道isSoldOut和ISPUNCED所需的非默认值。您可以使用@Builder。此的默认功能:@Builder。默认私有布尔值isSoldOut=false 例如。

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

最后一个选项是自己创建all args构造函数。

 类似资料:
  • 问题内容: 我正在将Lombok项目与Spring Data JPA一起使用。有什么方法可以将Lombok 与JPA默认构造函数连接? 码: 据我所知,JPA需要默认的构造函数,该构造函数被注解覆盖。有什么解决方法吗? 这段代码给我错误: 问题答案: 更新 根据反馈和John的回答,我已更新了不再使用or的答案,而是通过和创建访问器和变量,通过创建默认构造函数via,最后我们创建了构建器通过via

  • 我使用默认构造函数从子类中设置recordId的值,最初没有使用lombok。最终我决定在这里使用构建器,但现在的问题是lombok构建器在内部覆盖了我的默认构建器,因此从未设置值。

  • 问题内容: 所有, 我正在尝试在一些古老的Java代码中进行一些单元测试(无接口,无抽象等)。 这是一个使用ServletContext的servlet(我假设它是由Tomcat设置的),并且它的数据库信息在web.xml / context.xml文件中设置。现在,我已经弄清楚了如何制作Fake ServletContext,但是代码已经 遍布整个地方(因此替换它是不可行的)。我需要找到一种方法

  • 问题内容: 我有一个对象 我用两种方式初始化它 这是输出 似乎builder没有获得默认值。我在属性中添加了注释,对象现在看起来像这样 这是控制台输出 我怎样才能使他们俩都成为? 问题答案: 我的猜测是,这是不可能的(没有删除代码)。但是,为什么不仅仅实现所需的构造函数呢?Lombok旨在使您的生活更轻松,如果Lombok无法解决某些问题,请按照老式的方式进行操作。 控制台输出:

  • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数

  • 在Graphql工具文档的默认解析器部分中,它声明 从obj返回具有相关字段名的属性,或 https://www.apollographql.com/docs/graphql-tools/resolvers.html#Default-resolver 类型def: 给定此查询解析器: 因此,如果我像这样手动定义解析器,它就会工作。 但是,如果我删除定义并依赖默认解析功能,它将无法工作。 我希望它调