如何设计构造函数?

Jav*_*per 0 java constructor

让我们假设一个Foo具有2个实例变量的类,int x和int y.用例要求我可以使用none,single或all params来构造类.

input X    input Y

  0         0           no constuctor

  0          1          public Foo(int x);

  1          0          public Foo(int y);

  1          1          public Foo(int x, int y);
Run Code Online (Sandbox Code Playgroud)

现在讨论这种情况下的惯例/最佳做法.我是否需要添加构造函数的所有排列?如果是,它将导致指数增长.如果否,那么最新解决方案是什么?

Mik*_*uel 7

您最好的选择是使用构建器模式

new FooBuilder().build()   // Uses default values for both parameters

new FooBuilder().setX(42).build()  // Uses default value for y

new FooBuilder().setY(-13).build()  // Uses default value for x

new FooBuilder().setX(42).setY(-13).build()  // Supplied values for both
Run Code Online (Sandbox Code Playgroud)

然后你的建设者可能看起来像

class FooBuilder {
  public Foo build() { return new Foo(...); }
  public FooBuilder setX(int x) { ...; return this; }
  public FooBuilder setY(int y) { ...; return this; }
}
Run Code Online (Sandbox Code Playgroud)