2

我有一个方法,我想在不同的场合使用。这意味着我想使用该方法,但每次传入不同数量的参数:

考虑这个例子:

public checkInput(Object a, Object b, Object c, Object d) {
    a.someMethod();
    b.someMethod();
    c.someMethod();
    d.someMethod();
}

现在我只能checkInput(...)在传入4个参数时使用此方法。但是,有时我只能传入两个参数,例如。

如果我想调用这样的方法,checkInput(a, b, null, null);我会得到一个NullPointerException.

所以现在我想知道,在这种情况下我是否必须使用重载,这意味着我必须创建

public checkInput(Object a) {
    a.someMethod();
}

public checkInput(Object a, Object b) {
    a.someMethod();
    b.someMethod();
}

... 等等。

4

2 回答 2

9

您可以定义变量arity方法

public checkInput(Object... args) {
    // args is nothing but an array.
    // You can access each argument using indices args[0], args[1], ...
}

现在,您可以使用任意数量的参数调用此方法:

checkInput(obj);
checkInput(obj1, obj2);

使用可变参数类似于使用数组作为参数。但它为您提供了传递参数的灵活性,而无需创建数组。

但要小心,因为 var-args 的类型是Object,它会接受任何类型的参数。在使用它们之前,您应该进行适当的检查。此外,您的方法中只能有一个 vararg 参数,并且该参数也应该排在参数列表的最后。

于 2013-08-03T20:40:17.503 回答
0

不,只需重新使用四参数方法

public checkInput(Object a) {
    checkInput(a, null, null, null);
}

public checkInput(Object a, Object b) {
    checkInput(a, b, null, null);
}
于 2013-08-03T20:42:23.170 回答