Java 是否支持缺省参数值?

我遇到了一些具有以下结构的Java代码:

public MyParameterizedFunction(String param1, int param2)
{
    this(param1, param2, false);
}

public MyParameterizedFunction(String param1, int param2, boolean param3)
{
    //use all three parameters here
}

我知道在C++我可以为参数分配默认值。例如:

void MyParameterizedFunction(String param1, int param2, bool param3=false);

Java是否支持这种语法?为什么这两步语法更可取,有什么原因吗?


答案 1

不,您找到的结构是Java处理它的方式(即,使用重载而不是默认参数)。

对于构造函数,请参阅有效的 Java:编程语言指南的第 1 项提示(如果重载变得复杂,请考虑使用静态工厂方法而不是构造函数)。对于其他方法,重命名某些情况或使用参数对象可能会有所帮助。这是当您具有足够的复杂性时,区分是困难的。一个明确的例子是,你必须使用参数的顺序来区分,而不仅仅是数字和类型。


答案 2

否,但您可以使用生成器模式,如此堆栈溢出答案中所述。

如链接的答案中所述,生成器模式允许您编写类似

Student s1 = new StudentBuilder().name("Eli").buildStudent();
Student s2 = new StudentBuilder()
                 .name("Spicoli")
                 .age(16)
                 .motto("Aloha, Mr Hand")
                 .buildStudent();

其中,某些字段可以具有默认值或可选。