2013-07-24 4 views
12

ここに私のシナリオを示します。Java:メソッドへの複数のパラメータの送信

メソッドを呼び出す必要があります。パラメータを Parameter1、Parameter2、..、..、Nに設定します。 ただし、メソッドに送信するパラメータは、それぞれの場合に変更されることがあります。

ケース1:パラメータの組み合わせが

ケース3に送られる:2のみパラメータ1が送信され

ケースすべてのパラメータが

に送信されますどのような最善の方法ですこれをJavaで実現するには?

答えて

23

も参照してください。 eの質問への答え - すべてのパラメータが同じタイプになりますか?そうであれば、それぞれ同じように扱われますか?しかし、各パラメータが同じ型であるとして扱われます場合

public class MyClass 
{ 
    public void doSomething(int i) 
    { 
    ... 
    } 

    public void doSomething(int i, String s) 
    { 
    ... 
    } 

    public void doSomething(int i, String s, boolean b) 
    { 
    ... 
    } 
} 

:パラメータが同じタイプではありませんか、もっと重要なのは同じ、あなたが使用する必要があるメソッドのオーバーロードを処理する予定がない場合は

public MyClass 
{ 
    public void doSomething(int... integers) 
    { 
    for (int i : integers) 
    { 
     ... 
    } 
    } 
} 

明らかに変数引数を使用しているときは、そのインデックスによって各引数にアクセスすることができますが、ほとんどの場合、それは問題でヒントとして、私はこれに対して助言する:あなたは、可変引数は、Javaで機能を使用できるのと同じ方法であなたのデザイン。同様に、引数を反復処理するときに型チェックを行うと、デザインにレビューが必要になります。

+0

すべてのパラメータは同じ型ではなく、渡されるパラメータの数はわかりません。 –

+1

私はより明確になっているはずです - タイプチェックの必要なしに、すべてのパラメータを同じスーパータイプとして扱うことができますか?型チェックは世界の終わりではありませんが、ほとんどの場合、コードの臭いがあります。 –

+0

すべてのパラメータは同じ型ではなく、渡されるパラメータの数はわかりません。 例: メソッド(文字列a1、文字列a2、文字列b1、文字列b2、..、..およびいくつかの共通int、文字列パラメータ) ここで、a1とa2は1セット、b1とb2は別のセットなどです。しかし、我々は渡さなければならないセットの数を知らない。 –

9

多くのオブジェクトを印刷するvoidメソッドがあるとします。私はN.コメントから

に0から値を受け入れる引数としてvarargeを使用上記の例

public static void print(Object... values){ 
    for(Object c : values){ 
     System.out.println(c); 
    } 
} 

何2かの文字列と5つの整数??

回答:

print("string1","string2",1,2,3,4,5); 
+0

2つの文字列と5つの整数の場合 –

+0

'String'を呼び出す代わりに' Object'sと呼ぶだけです。 – jrad

+0

@ sureshatta:ジャックはすでに答えています。オブジェクト型としての可変幅を作る – Azad

7

あなたはvarargs

public function yourFunction(Parameter... parameters) 

を使用することができるソリューションが目に依存

Java multiple arguments dot notation - Varargs

+2

+1、ドキュメントを追加するには –

+0

Varargsパラメータは、パラメータのリストの最後に指定する必要があります。 – CoolMind

関連する問題