假设我有一个构造函数FooBar(String foo,String bar)。有时我需要只使用“ foo”创建对象,有时只使用“ bar”创建对象。

在对象创建期间避免空值的明显本能是重载构造函数。
但这产生了相同签名的问题。
例如:

FooBar(String foo)
FooBar(String bar)
FooBar(String foo, String bar).


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

最佳答案

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


您说过您不想要构建器,但这是消除null的最佳方法。这听起来像是下一个最佳方法。

关于java - 签名重叠时如何重载构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19696275/

10-16 01:20