如何使用带有默认构造函数的 lombok
How to use lombok with default constructor
我的 AssignedPropertiesDTO class 是:
@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() 来设置 class 字段,而在某处只使用 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
} ]
请指导我该怎么做。
当您将 isPurged
和 isSoldOut
定义为 boolean
而不是 Boolean
时,变量默认初始化为 false
(根据您的构造函数).
如果你需要另一个初始化,你可以在声明变量时简单地定义它,例如将一个设为真,将另一个设为假:
Data
@Builder
@AllArgsConstructor
public class AssignedPropertiesDTO {
@JsonProperty("is_sold_out")
private boolean isSoldOut = true;
@JsonProperty("is_purged")
private boolean isPurged = false;
}
@Builder
为您创建一个全参数构造函数;它不知道 isSoldOut 和 isPurged 所需的非默认值。您可以为此使用 @Builder.Default
功能:例如 @Builder.Default private Boolean isSoldOut = false;
。
或者将它们设为小写 b 布尔值,'false' 现在是自然默认值。如果这是一个选项,那么它是迄今为止最好的解决方案。
你最后的选择是自己制作全参数构造函数。
您是否尝试过为布尔值分配默认值?值得注意的是,布尔值默认值为 false。另外,使用布尔值而不是布尔值,这样它就不能支持空值。
在一个不相关的注释中,您通常不会给出以 'is' 开头的布尔值名称。这通常留给访问者。
@JsonProperty("sold_out")
private boolean soldOut;
我的 AssignedPropertiesDTO class 是:
@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() 来设置 class 字段,而在某处只使用 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
} ]
请指导我该怎么做。
当您将 isPurged
和 isSoldOut
定义为 boolean
而不是 Boolean
时,变量默认初始化为 false
(根据您的构造函数).
如果你需要另一个初始化,你可以在声明变量时简单地定义它,例如将一个设为真,将另一个设为假:
Data
@Builder
@AllArgsConstructor
public class AssignedPropertiesDTO {
@JsonProperty("is_sold_out")
private boolean isSoldOut = true;
@JsonProperty("is_purged")
private boolean isPurged = false;
}
@Builder
为您创建一个全参数构造函数;它不知道 isSoldOut 和 isPurged 所需的非默认值。您可以为此使用 @Builder.Default
功能:例如 @Builder.Default private Boolean isSoldOut = false;
。
或者将它们设为小写 b 布尔值,'false' 现在是自然默认值。如果这是一个选项,那么它是迄今为止最好的解决方案。
你最后的选择是自己制作全参数构造函数。
您是否尝试过为布尔值分配默认值?值得注意的是,布尔值默认值为 false。另外,使用布尔值而不是布尔值,这样它就不能支持空值。
在一个不相关的注释中,您通常不会给出以 'is' 开头的布尔值名称。这通常留给访问者。
@JsonProperty("sold_out")
private boolean soldOut;