Java是否有一种语法来指定传递给方法的零或一个值?

Eli*_*jah 4 java overloading

所以我发现我们有零点或更多的3点符号但是有零或一个吗?

我需要改变一个方法,而不是重载它我想知道是否有一个语法只允许零或一个值传递?

public void test(String sample, ObjectMapper... argOm){
    ObjectMapper om = (!argOm.equals(null)?argOm:new ObjectMapper());
}
Run Code Online (Sandbox Code Playgroud)

这不是我想要的,因为它期待[].我只想零或一个.

除了改变对此的所有引用之外,重载是唯一的方法吗?

das*_*ght 6

如果您希望编译器为您检查参数的数量,则需要使用重载.遗憾的是,Java没有提供默认参数机制,该机制用于在其他语言中对"零或一"进行建模.

幸运的是,重载非常简单,它允许您替换实现中的条件赋值:

public void test(String sample){
    test(sample, new ObjectMapper());
}
public void test(String sample, ObjectMapper om){
    if (om == null) {
        throw new IllegalArgumentException("object mapper");
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,用于允许调用者不传递对象映射器的条件代码将替换为重载,该重载在编译时检测到这种情况.


Joe*_*Joe 5

最佳做法是重载方法并提供默认值,如下所示:

public void test(String sample) {
    test(sample, new ObjectMapper());
    ...
}
public void test(String sample, ObjectMapper argOm) {
    ObjectMapper om;
    if (argOm != null)
        om = argOm;
    ...
}
Run Code Online (Sandbox Code Playgroud)

默认值是新的ObjectMapper对象.带有1个参数的方法使用2个参数调用该方法,包括默认值.