Java 中的可變引數

Mohammad Irfan 2023年1月30日 2022年5月1日
  1. 變數引數的語法 Varargs Ib Java
  2. 在 Java 中使用 Varargs 引數
  3. 在 Java 中過載變數引數方法
Java 中的可變引數

變數引數 varargs 是 Java 中的一個概念。我們可以為方法提供可變數量的引數零或多個引數

通常,一個方法接受其簽名中提到的相同數量的引數,但使用 varargs,我們可以傳遞任意數量的引數。

我們也可以使用 overloaded 方法,或者我們也可以使用以陣列作為引數的方法來達到同樣的目的,但它被認為不好,因為它會導致維護問題。

我們需要在 Java 中使用 varargs 的原因是:

  • 我們不知道要為方法傳遞的引數數量。
  • 我們希望將無限數量的引數傳遞給方法。

變數引數的語法 Varargs Ib Java

public static void show(int ... a){
        // body of the method
    }

varargs 中,我們在資料型別後面使用三個點。讓我們通過程式碼示例來理解。

在 Java 中使用 Varargs 引數

在這個例子中,我們建立了一個接受 varargs 引數的 show() 方法,並且在呼叫期間,我們傳遞了不同數量的引數。此方法適用於所有引數長度。

public class SimpleTesting {
    // show method that takes the variable number of integers as arguments
    static void show(int... a) {
        System.out.println("Number of arguments: " + a.length);

        // using for-each loop for printing each element of a
        for (int element : a) {
            System.out.println(element);
        }
    }
    // Driver code
    public static void main(String[] args) {
        // one parameter
        show(25);
        // four parameters
        show(10, 20, 30, 40);
        // zero parameters
        show();
    }
}

輸出:

Number of arguments: 1
25
Number of arguments: 4
10
20
30
40
Number of arguments: 0

我們建立了一個方法 show(),它接受可變數量的整數引數。我們已經將陣列的資料型別宣告為 int。所以它只能取整數值。

我們使用 a.length() 方法來確定引數的數量。然後我們建立了每個迴圈來顯示 a 的內容。

然後,我們用一個引數四個引數無引數呼叫 varargs 方法。我們可以為方法提供可變長度的引數。

儘管如此,我們必須記住,我們只能為方法提供一個 varargs 引數,並且應該將其最後寫入方法宣告的引數列表中。

例如:

 static void show(String value, float b, int... a)

在這種情況下,我們必須將第一個引數作為字串提供,第二個引數是浮點數,然後我們可以將其餘引數作為整數提供。

public class SimpleTesting {
    // show mehtod that takes string and float as argument followed by varargs
    static void show(String value, float b, int... a) {
        System.out.println("String: " + value);
        System.out.println("Number of arguments: " + a.length);

        // using for-each loop for printing each element of a
        for (int element : a) {
            System.out.println(element);
        }
    }
    // Driver code
    public static void main(String[] args) {
        // calling the varargs method with different number of parameters
        show("Java Exercise", 10.2f, 1);
        show("Virat", 20.2f, 1, 2, 3, 4, 5);
        show("Rohit", 22.5f);
    }
}

輸出:

String: Java Exercise
Number of arguments: 1
1
String: Virat
Number of arguments: 5
1
2
3
4
5
String: Rohit
Number of arguments: 0

在 Java 中過載變數引數方法

此示例演示如何覆蓋接受 varargs 引數的方法。請參見下面的示例。

class SimpleTesting {
    // method overloading example takes integers as a variable arguments
    private void show(int... a) {
        int sum = 0;
        for (int element : a) {
            sum += element;
        }
        System.out.println("sum = " + sum);
    }
    // takes boolean as a argument followed by varargs
    private void show(boolean p, String... args) {
        boolean negate = !p;
        System.out.println("negate = " + negate);
        System.out.println("args.length = " + args.length);
    }
    // Driver code
    public static void main(String[] args) {
        SimpleTesting obj = new SimpleTesting();
        obj.show(11, 22, 33);
        obj.show(true, "virat", "Rohit");
    }
}

輸出:

sum = 66
negate = false
args.length = 2

varargs 的規則是:

  • 我們只能在方法中提供一個變數引數。
  • 變數引數必須是最後一個引數。

一些無法編譯的 varargs 示例:

void method(float... a, int... b){}//Compile time error  
void method(double... a, String b){}//Compile time error   

在本文中,我們瞭解了 varargs。我們已經瞭解了為什麼需要 varargs 語法,並且我們舉了三個例子來深入理解 varargs 的概念。