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

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


我不介意它是否会沿途制作很多副本。如果整个过程只创建一个实例,就像我下面的解决方案一样;但是,如果解决方案采用不可变的 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手动修改结果以与其他设置器保持一致 - 有没有更好的方法来做到这一点?


白衣染霜花
浏览 125回答 1
1回答

拉丁的传说

是的,这是可能的。按 Alt-Insert(或“代码”->“生成”)打开“生成”菜单选择二传手。在下一个窗口中,在名为“Template”的顶部下拉菜单中选择“Builder”(默认情况下它是“intellij Default”)。您将获得与您想要的完全相同的结果。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java