In Java erstellt die Methode Arrays.asList() eine nicht veränderbare Liste aus einem Array. Es unterstützt varargs-Argumente, die sich für die Übergabe eines Arrays von Werten eignen. Die Verwendung von Arrays.asList() mit primitiven Array-Typen kann jedoch zu unerwarteten Ergebnissen führen.
Beachten Sie den folgenden Code:
float[] floatArray = {1.0f, 2.0f, 3.0f}; List<Float> floatList = Arrays.asList(floatArray); // Works int[] intArray = {1, 2, 3}; List<Integer> intList = Arrays.asList(intArray); // Incorrect
Im ersten Beispiel wurde Arrays.asList() erfolgreich erstellt eine Liste
Warum das unerwartete Verhalten?
Java-Generika unterstützen keine primitiven Typen. Stattdessen verwenden sie Wrapper-Klassen wie Integer und Float, um diese Werte darzustellen. Wenn Arrays.asList() mit einem primitiven Array aufgerufen wird, versucht es, eine Liste der entsprechenden Wrapper-Klasse zu erstellen. Da es jedoch kein List
So korrigieren Sie es
Um eine List
intArray = {1, 2, 3}; Integer[] intObjects = new Integer[intArray.length]; for (int i = 0; i < intArray.length; i++) { intObjects[i] = Integer.valueOf(intArray[i]); } List<Integer> intList = Arrays.asList(intObjects); // Correct
Warum Autoboxing für Arrays nicht funktioniert
Autoboxing gilt nur für einzelne Grundelemente, nicht für ganze Arrays. Beispielsweise wird der Ausdruck Integer.valueOf(intArray) nicht automatisch alle Elemente von intArray in Integer-Objekte einpacken. Stattdessen kommt es zu einem Fehler bei der Kompilierung.
Alternative Lösungen
Alternativ können Sie andere Bibliotheken verwenden, die Methoden zum Konvertieren primitiver Arrays in Wrapper-Listen bereitstellen Klassen. Beispielsweise bietet die Guava-Bibliothek die Methode Ints.asList() an, die ein primitives int[] in eine List
Das obige ist der detaillierte Inhalt vonWas sind die Einschränkungen und unerwarteten Verhaltensweisen der Arrays.asList()-Methode von Java mit primitiven Arrays?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!