IntelliJ IDEA:在没有插件的情况下创建类型安全生成器的简单方法



使用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();

我不介意是否有一个单独的构建器类(更喜欢将所有方法都阻塞在原始类上,但没有什么大不了的)。

我不介意它一路上是否能复制很多份。更喜欢整个过程只创建一个实例,就像我下面的解决方案一样;但是,如果解决方案采用不可变的实例逐setter字段方法,那就没什么大不了的了。


以下是我目前为实现这一目标所做的工作。

(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免费为我提供了一个克隆方法)。给我留下了这个小美女,这就是我最初想要的:

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;
}
}

怎么样,欧比旺堆栈溢出,有没有办法用更少的pfaffing来做到这一点?

我希望能够做的另一件事是添加具有较少pfaffing的字段。目前,当我添加一个字段时,我正在进行generate setter——手动修改结果以与其他setter保持一致——有更好的方法吗?

是的,这是可能的。

  1. 按Alt Insert(或"代码"->"生成")打开"生成"菜单
  2. 选择Setter
  3. 在下一个窗口中,在名为"模板"的顶部下拉菜单中选择"生成器"(默认情况下为"intellij default")

您将获得与您想要的完全相同的结果。

最新更新