使用 Lombok 更改 SuperBuilder 方法
Change SuperBuilder method with Lombok
我有一个class如下:
@Data
@SuperBuilder
@NoArgsConstructor
@JsonInclude(Include.NON_NULL)
public class CustomObject extends Parent<CustomObject> {
...
@Accessors(
chain = true,
prefix = {"_"})
@Builder.Default
private Boolean _default = false;
}
这会生成一个带有 default() 方法的构建器,该方法由于是保留字而无法使用。有没有办法改变这种行为,以便生成器工作?
不幸的是,在这种情况下没有好的方法。 @Accessors
影响 getters、setters 和 builders,因为在绝大多数情况下这是你需要的。你不能只为建设者关闭它。
这意味着唯一的出路(除了重命名 _default
字段)是删除 @Accessors
并手动实现 getter 和 setter:
@Data
@SuperBuilder
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class CustomObject {
@Builder.Default
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private Boolean _default = false;
public Boolean getDefault() {
return _default;
}
public CustomObject setDefault(Boolean _default) {
this._default = _default;
return this;
}
}
我有一个class如下:
@Data
@SuperBuilder
@NoArgsConstructor
@JsonInclude(Include.NON_NULL)
public class CustomObject extends Parent<CustomObject> {
...
@Accessors(
chain = true,
prefix = {"_"})
@Builder.Default
private Boolean _default = false;
}
这会生成一个带有 default() 方法的构建器,该方法由于是保留字而无法使用。有没有办法改变这种行为,以便生成器工作?
不幸的是,在这种情况下没有好的方法。 @Accessors
影响 getters、setters 和 builders,因为在绝大多数情况下这是你需要的。你不能只为建设者关闭它。
这意味着唯一的出路(除了重命名 _default
字段)是删除 @Accessors
并手动实现 getter 和 setter:
@Data
@SuperBuilder
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class CustomObject {
@Builder.Default
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private Boolean _default = false;
public Boolean getDefault() {
return _default;
}
public CustomObject setDefault(Boolean _default) {
this._default = _default;
return this;
}
}