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


当前回答

您可以使用以下选项-

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

其他回答

它在java中不受支持,例如Kotlin在其他语言中也不受支持。

它不受支持,但有几个选项,如使用带有语法糖的参数对象模式:

public class Foo() {
    private static class ParameterObject {
        int param1 = 1;
        String param2 = "";
    }

    public static void main(String[] args) {
        new Foo().myMethod(new ParameterObject() {{ param1 = 10; param2 = "bar";}});
    }

    private void myMethod(ParameterObject po) {
    }
}

在这个示例中,我们使用默认值构造ParameterObject,并在类实例初始化部分{param1=10;param2=“bar”;}中重写它们

这可以在Scala中实现,Scala在JVM上运行,并与Java程序兼容。http://www.scala-lang.org/

i.e.

class Foo(var prime: Boolean = false, val rib: String)  {}

类似于方法的构造函数

static void popuping() {
    popuping("message", "title");
}
static void popuping(String message) {
    popuping(message, "title");
}
static void popuping(String message, String title){
    JOptionPane.showMessageDialog(null, message,
            title, JOptionPane.INFORMATION_MESSAGE);
}

尝试此解决方案:

public int getScore(int score, Integer... bonus)
{
    if(bonus.length > 0)
    {
        return score + bonus[0];
    }

    return score;
}