2

いろいろな場面で使いたいメソッドがあります。つまり、メソッドを使用したいのですが、毎回異なる量の引数を渡します。

次の例を検討してください。

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

checkInput(...)4 つのパラメーターを渡す場合にのみ、このメソッドを使用できるようになりました。ただし、たとえば 2 つのパラメーターしか渡すことができない場合があります。

このようにメソッドを呼び出したい場合は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

可変アリティ メソッドを定義できます。

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 を使用することは、配列をパラメーターとして使用することに似ています。ただし、配列を作成せずにパラメーターを渡す柔軟性が得られます。

Objectただし、var-args の型はであるため、任意の型の引数を取ることに注意してください。それらを使用する前に、適切なチェックを行う必要があります。また、メソッドに vararg パラメータを 1 つしか持つことができず、それもパラメータのリストの最後に来る必要があります。

于 2013-08-03T20:40:17.503 に答える
0

いいえ。単に次のように 4 つのパラメータの方法を再利用します。

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 に答える