Heim > Java > javaLernprogramm > Kann ich ein Array als Argumente an eine Java-Methode mit variablen Argumenten übergeben?

Kann ich ein Array als Argumente an eine Java-Methode mit variablen Argumenten übergeben?

Mary-Kate Olsen
Freigeben: 2024-12-06 16:11:17
Original
873 Leute haben es durchsucht

Can I Pass an Array as Arguments to a Java Method with Variable Arguments?

Kann ich in Java ein Array als Argumente an eine Methode mit variablen Argumenten übergeben?

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);
  }
}
Nach dem Login kopieren

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!!!
Nach dem Login kopieren
", "[ %s ]"); return String.format(format, args); } public static void main(String... args) { System.out.println(ezFormat("A", "B", "C")); // prints "[ A ][ B ][ C ]" }

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.

Fallstricke bei Methoden mit variabler Arität

Übergabe von Nullwerten

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"
Nach dem Login kopieren

... 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;
}
Nach dem Login kopieren

Zusätzliche Argumente hinzufügen

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 ]"
Nach dem Login kopieren

Übergeben von Arrays von Primitive

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage