簡體   English   中英

在Java中的方法調用中添加未知數量的參數

[英]adding an unknown number of parameters to a method call in Java

我有一個要擴展的方法(而不是編寫一個基本上做同樣事情的新方法),方法是在參數列表的末尾添加未知數量的參數。

如果執行此操作,是否需要更改對方法的所有調用? 我想問題是,未知參數是否包括根本沒有傳入參數的情況?

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

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

我可以打電話給:

queryFactory(typeArgsInstce, queryTypeInstce)

然后,當我需要向查詢調用中添加參數時:

queryFactory(typeArgsInstce, queryTypeInstce, argsInstce)

其中argsInstce是包含額外參數的整數數組。

我只想編輯此方法,而不是編寫一個新方法,該方法幾乎可以做完全相同的事情,只是它有一些要添加到查詢中的參數。 如果要編輯此方法,則我將只編寫另一種方法,而我必須更改對此方法的所有其他調用。

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
}

因此,用語言來回答這個問題:我們至少需要兩個參數。 這會將空數組“ 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參數必須是最后一個,因此它不會與第一個數組沖突

如您所問我可以打電話:您可以在此處打電話的例子

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

我知道您不想更改方法的簽名,因為您將需要更改該方法的每次調用,因此您可以創建一個在所有代碼中都包含3個arg的方法,並僅重載同一個方法2個參數,但是在此方法中,您僅使用3個參數調用該方法,最后一個arg將為null。 我知道不是您想要的,但是您不會重復代碼並更改方法的簽名。

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

public void queryFactory(int [] typeArgs, int queryType){
    queryFactory(typeArgs,queryType,null);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM