我想使用 IntelliJ IDEA 创建一个 POJO 类,以帮助我避免犯愚蠢的错误,例如以错误的方式获取参数。
- 我不关心其他 IDE
- 我不想使用任何形式的反射(即没有 Lombok 或类似的)
- 我不关心 JavaBean 标准
- 我不关心“最佳实践”
我只想创建一个类,声明一些字段并有一种方便的方法来创建所述类,以减少我在创建类时以错误的方式获得相同类型参数的可能性。
从这里开始:
public class TestObject {
public String x;
public String y;
}
我想生成一些我可以使用的东西,就像这样:
TestObject o = new TestObject().setX("x").setY("y");
或者这个:
TestObject o = TestObjectBuilder.withX("x").withY("y").build();
我不介意是否有一个单独的构建器类(更喜欢将所有方法都放在原始类上,但没什么大不了的)。
我不介意它一路上复制很多份。更喜欢整个过程只创建 1 个实例,就像我下面的解决方案一样;但是,如果解决方案采用不可变实例每个 setter 字段的方法 - 没什么大不了的。
以下是我目前为实现这一目标所做的工作。
(1) 使用IDEA生成构造函数
,选择所有字段,结果如下:
public class TestObject {
public String x;
public String y;
public TestObject(String x, String y) {
this.x = x;
this.y = y;
}
}
(2) Refactor Constructor with Builder
,必须选择Use existing
,然后复制/粘贴TestObject
名称进入字段,因为为什么不,导致:
public class TestObject {
public String x;
public String y;
public TestObject(String x, String y) {
this.x = x;
this.y = y;
}
public TestObject setX(String x) {
this.x = x;
return this;
}
public TestObject setY(String y) {
this.y = y;
return this;
}
public TestObject createTestObject() {
return new TestObject(x, y);
}
}
(3) 手动删除构造函数(因为它的存在拒绝使用默认构造函数)并删除 createTestObject() 方法(因为它是多余的,Java 免费给了我一个克隆方法)。留给我这个小美女,这是我最初想要的:
public class TestObject {
public String x;
public String y;
public TestObject setX(String x) {
this.x = x;
return this;
}
public TestObject setY(String y) {
this.y = y;
return this;
}
}
怎么样,Obi-wan Stack-overflow,有没有一种方法可以做到这一点而不是胡扯?
我希望能够做的另一件事是添加字段,而不是胡扯。目前,当我添加一个字段时,我正在执行 generate setter
手动修改结果以与其他 setter 保持一致 - 有更好的方法吗?
最佳答案
是的,这是可能的。
- 按 Alt-Insert(或“代码”->“生成”)打开“生成”菜单
- 选择二传手。
- 在下一个窗口中,在名为“Template”的顶部下拉菜单中选择“Builder”(默认情况下它是“intellij Default”)。
您将获得与您想要的完全相同的结果。
关于java - IntelliJ IDEA : simple way to create type-safe builder without plugins?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54361811/