我遇到了一些具有以下结构的 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 是否支持这种语法?为什么这两个步骤语法更可取?
不,您找到的结构是 Java 处理它的方式(即使用重载而不是默认参数)。
对于构造函数,如果重载变得复杂,请参阅 Effective Java:编程语言指南的第 1 项提示(考虑静态工厂方法而不是构造函数)。对于其他方法,重命名某些情况或使用参数对象会有所帮助。这是当你有足够的复杂性,难以区分的时候。一个明确的情况是您必须使用参数的顺序来区分,而不仅仅是数字和类型。
如链接答案中所述,构建器模式可让您编写如下代码
Student s1 = new StudentBuilder().name("Eli").buildStudent(); Student s2 = new StudentBuilder() .name("Spicoli") .age(16) .motto("Aloha, Mr Hand") .buildStudent();
其中一些字段可以有默认值或者是可选的。