1

パラメータのリストの最後に不明な数のパラメータを追加することにより、(基本的に同じことを行う新しいメソッドを作成するのではなく) 拡張したいメソッドがあります。

これを行う場合、メソッドへのすべての呼び出しを変更する必要がありますか? 質問は、不明なパラメーターには、パラメーターがまったく渡されていない場合が含まれますか?

たとえば、メソッドがある場合:

queryFactory(int [] typeArgs, int queryType, int[] ... args){}

電話してもよろしいですか:

queryFactory(typeArgsInstce, queryTypeInstce)

そして、クエリ呼び出しにパラメーターを追加する必要がある場合:

queryFactory(typeArgsInstce, queryTypeInstce, argsInstce)

は、追加の引数argsInstceを含む整数の配列です。

クエリに追加する引数がいくつかあることを除いて、ほぼ同じことを行う新しいメソッドを作成するのではなく、このメソッドを編集するだけです。このメソッドを編集して、このメソッドへの他のすべての呼び出しを変更する必要がある場合は、単に別のメソッドを記述します。

4

3 に答える 3

6
public static void main(String[] args) {
    method(1);      // <- compile error
    method(1,2);
    method(1,2,3);
    method(1,2,3,4);
}

private static void method(int i1, int i2, int...i3) {
    // do something
}

質問に言葉で答えるには、少なくとも 2 つの引数が必要です。これにより、空の配列 'i3[]' がメソッドに渡されます。3 番以降の引数は配列値として扱われます。


違いはありません...

public static void main(String[] args) {
    method(new int[]{1});      // <- compile error
    method(new int[]{1},2);
    method(new int[]{1},2,new int[]{3,4});
    method(new int[]{1},2,new int[]{3,4},new int[]{5,6});
}

private static void method(int[] i1, int i2, int[]...i3) {
    // do something
}

最初の配列と競合しないように、varargs パラメータは最後にする必要があります。

于 2012-11-20T16:23:59.660 に答える
2

あなたが尋ねたように、電話できますか:ここに電話できます

public static void main(String[] args) {

        int[] i = { 1, 2, 3 };
        int[] i1 ={1,1,1,1};
        System.out.println("Sum: " + sum(i,2,i1));
        System.out.println("Sum: " + sum(i,2));
    }

    static int sum(int[] numbers1,int num,int[]... numbers2) {
        int t[][] = numbers2;
        int total = 0;
        for (int i = 0; i < t.length; i++) {
            for (int j = 0; j < t[i].length; j++) {
                System.out.print(t[i][j]);
                total += t[i][j];
            }

        }
        for(int test : numbers1)
             total+=test;

        total+=num;

        return total;
    }
于 2012-11-20T16:42:59.703 に答える
0

メソッドのすべての呼び出しを変更する必要があるため、メソッドのシグネチャを変更したくないことを理解しています。そのため、すべてのコードで3つの引数を持つメソッドを作成し、同じメソッドを1つだけでオーバーロードできます。 2つの引数。ただし、このメソッドでは3つの引数でのみメソッドを呼び出すため、最後の引数はnullになります。私はあなたが望んでいることではないことを知っていますが、コードを繰り返してメソッドのシグネチャを変更することはありません。

public void queryFactory(int [] typeArgs, int queryType, int... args){
     // do something
}

public void queryFactory(int [] typeArgs, int queryType){
    queryFactory(typeArgs,queryType,null);
}
于 2012-11-20T17:01:23.163 に答える