使用 IntelliJ IDEA,我想创建一个 POJO 类,以帮助我避免以错误的方式获取参数方面的愚蠢错误。
我不关心其他 IDE
我不想使用任何形式的反射(即没有龙目岛或类似的)
我不关心 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();
我不介意是否有一个单独的构建器类(更喜欢在原始类中使用所有方法,但没什么大不了的)。
我不介意它是否会沿途制作很多副本。如果整个过程只创建一个实例,就像我下面的解决方案一样;但是,如果解决方案采用不可变的 instance-per-setter-field 方法 - 没什么大不了的。
这是我目前为实现这一目标所做的工作。
(1)使用 IDEA Generate constructor,选择所有字段,结果如下:
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)手动删除构造函数(因为它的存在拒绝使用默认的ctor)并删除createTestObject()方法(因为是多余的,Java免费给了我一个clone方法)。留给我这个小美女,这是我一开始想要的:
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手动修改结果以与其他设置器保持一致 - 有没有更好的方法来做到这一点?
拉丁的传说
相关分类