如何为第三方类创建Lombok生成器(即,我无法修改其源代码)?
我有一个无法更改的现有类:
public class ThirdPartyPojo {
private String name;
// default no-args constructor
public ThirdPartyPojo() {}
String getName() {
return this.name;
}
void setName(String name) {
this.name = name;
}
// many more properties, getters and setters
}
现在我想创建一个@Builder
,这样我就可以得到一个流畅的Builder api,用默认值简化ThirdPartyPojo
的实例化。这就是我所尝试的:
@Builder
public class ThirdPartyPojoBuilder extends ThirdPartyPojo {
@Default
private String name = "default name";
// many more default values for other properties
}
代码已编译,我可以参考生成器,例如。
ThirdPartyPojo pojoWithDefaultName = ThirdPartyPojoBuilder.builder().build();
ThirdPartyPojo pojoWithCustomName = ThirdPartyPojoBuilder.builder().name("custom name").build();
System.out.println(pojoWithDefaultName.getName());
System.out.println(pojoWithCustomName.getName());
但是,对于pojoWithDefaultName
和pojoWithCustomName
而言,这不起作用,因为getName()
返回null
。
您可以按如下方式执行此操作:
假设您的第三方POJO名为ThirdPartyPojo
,与您的问题相同,具有以下源代码:
public final class ThirdPartyPojo {
private String name, someText;
private int id;
public ThirdPartyPojo() {
name = someText = null;
id = 0;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public String getSomeText() {
return someText;
}
public void setSomeText(final String someText) {
this.someText = someText;
}
public int getID() {
return id;
}
public void setID(final int id) {
this.id = id;
}
@Override
public String toString() {
return Integer.toString(id) + ", " + name + ", " + someText;
}
}
所以,在另一个类上创建一个构建器方法,就像这样:
import lombok.Builder;
public class ClientBuilder {
@Builder(builderMethodName = "builder")
public static ThirdPartyPojo newThirdPartyPojo(final int id,
final String name,
final String someText) {
final ThirdPartyPojo tpp = new ThirdPartyPojo();
tpp.setID(id);
tpp.setName(name);
tpp.setSomeText(someText);
return tpp;
}
}
方法应该接受所有可由生成器参数配置的。然后使用Builder方法中的setters根据给定的参数配置第三方Pojo
。
最后,您可以这样使用它:
public class Main {
public static void main(final String[] args) {
System.out.println(ClientBuilder.builder().name("The Name").someText("Some text...").id(5).build());
}
}
不要像ThirdPartyPojoBuilder
那样命名构建器类(即ThirdPartyPojo
的名称附加了builder
),因为它不起作用(至少对我来说不起作用)。
https://projectlombok.org/features/Builder
https://www.baeldung.com/lombok-builder#using-建筑工地施工法
问题内容: 我想为Kotlin创建POJO类,因为我们知道www.jsonschema2pojo.org将JSON转换为POJO,因此我们可以将其与gson一起使用。 有人知道如何 快速 为Kotlin创建Gson POJO 吗? 编辑: 我知道它使用Data类,但是有没有最简单的创建方法? 问题答案: 是的,我有解决方案 例如: 使用http://www.jsonschema2pojo.org/
我正在尝试生成第三方超文本标记语言的PDF版本(实际上它是一个HTM文件)。这种超文本标记语言将来可能会改变,我绝对无法控制它。我想做的就是将其转换为PDF。 我已经尝试了2个解决方案:iText(使用XmlWorker)和Fliing-Saucer,但迄今为止没有成功。 我的问题是HTML文件非常不符合默认模式。示例: 第一个没有关闭标记(iText崩溃),第二个没有“http equiv”值的
使用 Spring 使用 TCP 服务器 在 Spring 配置如下,来启动和关闭 H2 TCP 服务器 <bean id = "org.h2.tools.Server" class="org.h2.tools.Server" factory-method="createTcpServer" init-method="star
我在代码中使用Lombok自动生成getter和setter代码。我想添加其他个人注释并使用它。 例如,我想添加一个方法来验证列表中是否存在一个键: 创建注释后,我将执行以下操作:
问题内容: 我创建了一个简单的POJO: 经过一番搜索,我发现了这一点: 但是有了这个我得到了错误: 我找到了另一个解决方案: 但是这种方法不存在。 那么如何将POJO转换为JSON? 问题答案: 只需使用java Gson API : 然后您可以从json 创建一个,如下所示: 看看 GSON用户指南 ,这 SIMPLE GSON实例 的详细信息。
我在为Lombok getter和setter生成Javadoc时遇到问题。这两个建议我都试过了。示例字段及其文本如下所示: 但是,我在生成的Javadoc中既没有看到getter,也没有看到setter。我在Eclipse上使用受保护的可见性(项目-