我遇到了一些具有以下结构的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是否支持这种语法?这两步语法是可取的,有什么原因吗?


当前回答

不,但我们有另一种形式的函数重载。

未传递参数时调用

void operation(){

int a = 0;
int b = 0;

} 

在传递“a”参数时调用

void operation(int a){

int b = 0;
//code

} 

在传递参数b时调用

void operation(int a , int b){
//code
} 

其他回答

您可以使用以下选项-

public void mop(Integer x) {
  // Define default values
        x = x == null ? 200 : x;
}

我现在花了很多时间来研究如何将它与返回值的方法一起使用,到目前为止我还没有看到任何示例,我认为在这里添加这个可能很有用:

int foo(int a) {
    // do something with a
    return a;
}

int foo() {
    return foo(0); // here, 0 is a default value for a
}

我可能在这里说明了显而易见的情况,但为什么不自己实现“默认”参数呢?

public class Foo() {
        public void func(String s){
                func(s, true);
        }
        public void func(String s, boolean b){
                //your code here
        }
}

对于默认值,您可以使用

func("my string");

如果您不想使用默认值,可以使用

func("my string", false);

遗憾的是,没有。

如果您真的想要,可以使用null手动检查:

public MyParameterizedFunction(String param1, int param2, boolean param3)
{
    if(param3 == null) {
        param3 = false;
    }
}

然而,我强烈建议使用其他东西,比如重载或静态工厂。也许你可以逃避这一点,但这可能会导致意想不到的行为。例如,代码中可能有错误,因此布尔值永远不会得到值。在这种情况下,您不会得到NullPointerException。相反,它看起来像是被设置为false,调试时可能会非常混乱。