签名重叠时如何重载构造函数?

Jav*_*per 1 java constructor overloading

让我们假设我有一个构造函数FooBar(String foo,String bar).有时候我需要创建只有"foo"的对象,有时候只需要"bar"来创建两者.

在对象创建期间避免null的显而易见的本能是重载构造函数.但这会产生相同签名的问题.例如:

FooBar(String foo)
FooBar(String bar)
FooBar(String foo, String bar).
Run Code Online (Sandbox Code Playgroud)

假设我不想在这里使用构建器,是否有任何已知的替代方法可以避免构造对象而不使用null?换句话说,防止类似= new FooBar("foo",null)?

rge*_*man 6

提供static工厂方法,其名称可以变化并反映实际目的:

public static FooBar createWithFooOnly(String foo) {
    FooBar fb = new FooBar();
    fb.setFoo(foo);
    return fb;
}

public static FooBar createWithBarOnly(String bar) {
    FooBar fb = new FooBar();
    fb.setBar(bar);
    return fb;
}

public static FooBar createWithFooAndBar(String foo, String Bar) {
    FooBar fb = new FooBar();
    fb.setFoo(foo);
    fb.setBar(bar);
    return fb;
}
Run Code Online (Sandbox Code Playgroud)

你声明你不想要一个建造者,但这将是消除nulls 的最好方法.这听起来像是下一个最好的方式.