如何避免创建大量重载方法?

use*_*316 2 java overloading nullpointerexception

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

考虑这个例子:

public checkInput(Object a, Object b, Object c, Object d) {
    a.someMethod();
    b.someMethod();
    c.someMethod();
    d.someMethod();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

public checkInput(Object a, Object b) {
    a.someMethod();
    b.someMethod();
}
Run Code Online (Sandbox Code Playgroud)

... 等等.

Roh*_*ain 9

您可以定义Variable arity方法:

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

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

checkInput(obj);
checkInput(obj1, obj2);
Run Code Online (Sandbox Code Playgroud)

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

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