我有一种方法,我想在不同的场合使用。这意味着我想使用该方法,但每次传入不同数量的参数:
考虑这个例子:
public checkInput(Object a, Object b, Object c, Object d) {
a.someMethod();
b.someMethod();
c.someMethod();
d.someMethod();
}
现在,当我传入4个参数时,我只能使用此方法checkInput(...)
。但是,有时我只能传递两个参数。
如果我想调用这样的方法checkInput(a, b, null, null);
,我会得到一个NullPointerException
。
所以现在我想知道,在这种情况下我是否必须使用重载,这意味着我将不得不创建
public checkInput(Object a) {
a.someMethod();
}
public checkInput(Object a, Object b) {
a.someMethod();
b.someMethod();
}
......等等。
答案 0 :(得分:9)
您可以定义Variable arity method:
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);
使用varargs类似于使用数组作为参数。但它为您提供了传递参数的灵活性,而无需创建数组。
但要小心,因为var-args的类型是Object
,它将采用任何类型的参数。您应该在使用它们之前进行适当的检查。
此外,您的方法中只能有一个vararg参数,这也应该在参数列表中排在最后。
答案 1 :(得分:0)
没有。只需重复使用四个参数方法
public checkInput(Object a) {
checkInput(a, null, null, null);
}
public checkInput(Object a, Object b) {
checkInput(a, b, null, null);
}