In Java sind variable Aritätsmethoden (Methoden mit Variablen Argumente) verwenden ein Auslassungszeichen (...), um anzugeben, dass die Methode eine variable Anzahl von Argumenten akzeptiert. Wenn Sie ein Array an eine Methode mit variabler Arität übergeben, werden die Array-Elemente als einzelne Argumente für diese Methode behandelt.
Betrachten Sie den folgenden Code:
class A { private String extraVar; public String myFormat(String format, Object... args) { return String.format(format, extraVar, args); } }
In diesem Beispiel die myFormat-Methode Nimmt eine variable Anzahl von Argumenten (dargestellt durch ... args) und formatiert einen String mit der String.format-Methode. Das Problem besteht darin, dass args als einzelnes Object[]-Array und nicht als einzelne Argumente behandelt wird. Um dies zu beheben, können Sie die Tatsache nutzen, dass ein T... syntaktischer Zucker für ein T[] ist.
In der Java-Sprachspezifikation 8.4.1 heißt es:
„Wenn der letzte formale Parameter Ist ein variabler Aritätsparameter vom Typ T, wird davon ausgegangen, dass er einen formalen Parameter vom Typ T[] definiert. Die Methode ist dann eine variable Aritätsmethode.“
Um dies zu veranschaulichen, der folgende Code Das Snippet zeigt, wie ein Array als Argumente an eine Methode mit variabler Arität übergeben wird:
public static String ezFormat(Object... args) { String format = new String(new char[args.length]).replace("<pre class="brush:php;toolbar:false">static void count(Object... objs) { System.out.println(objs.length); } count(null, null, null); // prints "3" count(null, null); // prints "2" count(null); // throws java.lang.NullPointerException!!!
In diesem Beispiel akzeptiert die ezFormat-Methode eine variable Anzahl von Argumenten und gibt eine formatierte Zeichenfolge zurück. Da es sich bei String.format auch um eine Methode mit variabler Arität handelt, wird jedes an ezFormat übergebene Argument als einzelnes Argument für String.format behandelt.
Bei der Übergabe von Nullwerten an eine Methode mit variabler Arität ist es wichtig, die letzte Anweisung im Folgenden zu beachten Beispiel:
count(new Object[] { null }); // prints "1" count((Object) null); // prints "1"
... führt zu einer NullPointerException. Um dies zu vermeiden, können Sie das Nullargument als separates Array oder als Objekt übergeben, wie folgt:
static <T> T[] append(T[] arr, T lastElement) { final int N = arr.length; arr = java.util.Arrays.copyOf(arr, N+1); arr[N] = lastElement; return arr; } static <T> T[] prepend(T[] arr, T firstElement) { final int N = arr.length; arr = java.util.Arrays.copyOf(arr, N+1); System.arraycopy(arr, 0, arr, 1, N); arr[0] = firstElement; return arr; }
Um zusätzliche Argumente zu einem übergebenen Array hinzuzufügen Für eine Variable-Arity-Methode können Sie Hilfsmethoden wie append() und prepend() verwenden, um das Array zu ändern:
int[] myNumbers = { 1, 2, 3 }; System.out.println(ezFormat(myNumbers)); // prints "[ [I@13c5982 ]" Integer[] myNumbers = { 1, 2, 3 }; System.out.println(ezFormat(myNumbers)); // prints "[ 1 ][ 2 ][ 3 ]"
Variablen-Aritätsmethoden funktionieren nur mit Referenztypen. Autoboxing gilt nicht für Arrays von Grundelementen. Um ein Array von Grundelementen zu übergeben, müssen Sie diese zunächst in ein Array ihres Wrapper-Typs konvertieren:
Das obige ist der detaillierte Inhalt vonKann ich ein Array als Argumente an eine Java-Methode mit variablen Argumenten übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!