我遇到了一些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: Programming Language Guide's第1项提示(考虑用静态工厂方法代替构造函数),如果重载越来越复杂。对于其他方法,重命名一些情况或使用一个参数对象会有帮助。这是当你有足够的复杂性,以至于区分起来很困难。一个确定的情况是,你必须使用参数的顺序来区分,而不仅仅是数量和类型。
没有。
你可以通过传递一个具有智能缺省的对象来实现同样的行为。但这同样取决于你手头的情况是什么。