1

我有一个我想扩展的方法(而不是编写一个基本相同的新方法),方法是在参数列表的末尾添加未知数量的参数。

如果我这样做,我是否必须更改对该方法的所有调用?我想问题是,未知参数是否包括根本没有传入参数的情况?

例如,如果我有一个方法:

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

我可以打电话给:

queryFactory(typeArgsInstce, queryTypeInstce)

然后当我需要向查询调用添加参数时:

queryFactory(typeArgsInstce, queryTypeInstce, argsInstce)

whereargsInstce是一个包含额外参数的整数数组。

我只想编辑这个方法,而不是编写一个几乎完全相同的新方法,除了它有一些参数要添加到查询中。如果通过编辑这个方法我将不得不更改对这个方法的所有其他调用,我将简单地编写另一种方法。

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 个 args 的方法,并仅重载相同的方法2 个 args,但在此方法中,您只能使用 3 个 args 调用该方法,最后一个 arg 将为空。我知道不是您想要的,但您不会重复代码并更改方法的签名。

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 回答