En Java, la méthode Arrays.asList() crée une liste non modifiable à partir d'un tableau. Il prend en charge les arguments varargs, qui sont pratiques pour transmettre un tableau de valeurs. Cependant, l'utilisation d'Arrays.asList() avec des types de tableaux primitifs peut conduire à des résultats inattendus.
Considérez le code suivant :
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
Dans le premier exemple, Arrays.asList() crée avec succès une liste
Pourquoi ce comportement inattendu ?
Les génériques Java ne prennent pas en charge les types primitifs. Au lieu de cela, ils utilisent des classes wrapper comme Integer et Float pour représenter ces valeurs. Lorsque Arrays.asList() est invoqué avec un tableau primitif, il tente de créer une liste de la classe wrapper correspondante. Cependant, comme il n’existe pas de List
Comment le corriger
Pour obtenir une liste
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
Pourquoi l'autoboxing ne fonctionne pas pour les tableaux
Autoboxing s'applique uniquement aux primitives individuelles, pas aux tableaux entiers. Par exemple, l'expression Integer.valueOf(intArray) ne transformera pas automatiquement tous les éléments de intArray en objets Integer. Au lieu de cela, cela entraînera une erreur de compilation.
Solutions alternatives
Vous pouvez également utiliser d'autres bibliothèques qui fournissent des méthodes pour convertir des tableaux primitifs en listes de wrapper cours. Par exemple, la bibliothèque Guava propose la méthode Ints.asList(), qui enveloppe un int[] primitif dans un List
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!