什么规范支持可选参数?


当前回答

你可以像这样使用方法重载。

 public void load(String name){ }

 public void load(String name,int age){}

你也可以使用@Nullable注释

public void load(@Nullable String name,int age){}

简单地传递null作为第一个参数。

如果你传递相同类型的变量,你可以使用这个

public void load(String name...){}

其他回答

变量函数可以(以某种方式)做到这一点。除此之外,必须提供方法声明中的所有变量。如果希望变量是可选的,可以使用不需要参数的签名重载方法。

private boolean defaultOptionalFlagValue = true;

public void doSomething(boolean optionalFlag) {
    ...
}

public void doSomething() {
    doSomething(defaultOptionalFlagValue);
}

如果您计划使用具有多个参数的接口, 可以使用以下结构模式,并根据您的需求实现或重写apply方法。

public abstract class Invoker<T> {
    public T apply() {
        return apply(null);
    }
    public abstract T apply(Object... params);
}

如果它是一个API端点,一种优雅的方法是使用“Spring”注释:

@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(required = false, defaultValue = "hello") String id) { 
    return innerFunc(id);
}

注意在这个例子中,innerFunc将需要这个变量,因为它不是api端点,不能使用这个Spring注释使它成为可选的。 参考:https://www.baeldung.com/spring-request-param

我们可以通过方法重载或使用DataType…

方法重载:

RetDataType NameFnc(int NamePsgVar)
{
    // |* Code Todo *|
    return RetVar;
}

RetDataType NameFnc(String NamePsgVar)
{
    // |* Code Todo *|
    return RetVar;
}

RetDataType NameFnc(int NamePsgVar1, String NamePsgVar2)
{
    // |* Code Todo *|
    return RetVar;
}

最简单的方法是

| * |数据类型……可选参数

RetDataType NameFnc(int NamePsgVar, String... stringOpnPsgVar)
{
    if(stringOpnPsgVar.length == 0)  stringOpnPsgVar = DefaultValue; 

    // |* Code Todo *|
    return RetVar;
}

Java 5.0中有可选参数。只需像这样声明你的函数:

public void doSomething(boolean... optionalFlag) {
    //default to "false"
    //boolean flag = (optionalFlag.length >= 1) ? optionalFlag[0] : false;
}

你可以调用doSomething();或doSomething(真正的);现在。