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

时间:2013-08-03 20:39:16

标签: java nullpointerexception overloading

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

考虑这个例子:

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();
}

......等等。

2 个答案:

答案 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);
}