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


当前回答

No.

您可以通过传递具有智能默认值的Object来实现相同的行为。但这同样取决于你手头的情况。

其他回答

类似于方法的构造函数

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);
}

不。一般来说,Java没有太多(任何)语法糖,因为他们试图制作一种简单的语言。

类似的方法https://stackoverflow.com/a/13864910/2323964在Java8中工作的是使用带有默认getter的接口。这将使空白更加冗长,但可以模拟,并且非常适合在有大量实例需要注意参数的情况下使用。

public class Foo() {
    public interface Parameters {
        String getRequired();
        default int getOptionalInt(){ return 23; }
        default String getOptionalString(){ return "Skidoo"; }
    }

    public Foo(Parameters parameters){
        //...
    }

    public static void baz() {
        final Foo foo = new Foo(new Person() {
            @Override public String getRequired(){ return "blahblahblah"; }
            @Override public int getOptionalInt(){ return 43; }
        });
    }
}

遗憾的是,没有。

No.

您可以通过传递具有智能默认值的Object来实现相同的行为。但这同样取决于你手头的情况。