什么规范支持可选参数?


当前回答

在JDK>1.5中,你可以这样使用它;

public class NewClass1 {

    public static void main(String[] args) {

        try {
            someMethod(18); // Age : 18
            someMethod(18, "John Doe"); // Age & Name : 18 & John Doe
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    static void someMethod(int age, String... names) {

        if (names.length > 0) {
            if (names[0] != null) {
                System.out.println("Age & Name : " + age + " & " + names[0]);
            }
        } else {
            System.out.println("Age : " + age);
        }
    }
}

其他回答

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

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

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

VarArgs和重载已经被提到。另一种选择是Bloch Builder模式,它看起来像这样:

 MyObject my = new MyObjectBuilder().setParam1(value)
                                 .setParam3(otherValue)
                                 .setParam6(thirdValue)
                                 .build();

尽管这种模式最适合于在构造函数中需要可选参数的情况。

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

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

Java现在在1.8中支持可选类型,我在android上编程,所以我使用空值,直到我可以重构代码以使用可选类型。

Object canBeNull() {
    if (blah) {
        return new Object();
    } else {
        return null;
    }
}

Object optionalObject = canBeNull();
if (optionalObject != null) {
    // new object returned
} else {
    // no new object returned
}

你可以这样使用:

public void addError(String path, String key, Object... params) { 
}

params变量是可选的。它被视为对象的可空数组。

奇怪的是,我在文档中找不到任何关于这个的东西,但它是有效的!

这是Java 1.5及以上版本的“新功能”(Java 1.4或更早版本不支持)。

我看到用户bhoot在下面也提到了这一点。