Java Initialisation de la Liste en Une seule Ligne
Présentation
Dans ce tutoriel, nous allons étudier comment initialiser une Liste à l’aide de one-liners.
pour en savoir plus:
Collections.emptyList () vs New List Instance
Guide de la Java ArrayList
Créer à Partir d’un Tableau
On peut créer une Liste à partir d’un tableau. Et grâce aux littéraux de tableau, nous pouvons les initialiser en une seule ligne:
Nous pouvons faire confiance au mécanisme varargs pour gérer la création de tableau. Avec cela, nous pouvons écrire du code plus concis et lisible:
l’instance de résultat de ce code implémente l’interface de liste, mais ce n’est pas un java.util.,ArrayList ou une liste de liens. Au lieu de cela, c »est une liste soutenue par le tableau d »origine, ce qui a deux implications que nous examinerons dans le reste de cette section.
bien que le nom de la classe se trouve être ArrayList, il est dans le java.util.Les tableaux de package.
2.1. Taille fixe
l’instance de résultat des tableaux.asList aura une taille fixe:
2.2. Référence partagée
le tableau d’origine et la liste partagent les mêmes références aux objets:
créer à partir d’un flux (Java 8)
Nous pouvons facilement convertir un flux en N’importe quel type de Collection.,
par conséquent, avec les méthodes d’usine pour les flux, nous pouvons créer et initialiser des listes en une seule ligne:
nous devrions noter ici que les collecteurs.toList () ne garantit pas l’implémentation exacte de la liste renvoyée.
Il n’y a pas de contrat général sur la mutabilité, la sérialisabilité ou la sécurité des threads de l’instance renvoyée. Donc, notre code ne devrait pas compter sur l’une de ces propriétés.
certaines sources mettent en évidence ce flux.de(…).collect (…) peut avoir une mémoire et une empreinte de performance plus importantes que les tableaux.asList ()., Mais dans presque tous les cas, il est une telle micro-optimisation qu’il y a peu de différence.
méthodes D’usine (Java 9)
JDK 9 introduit plusieurs méthodes d’usine pratiques pour les collections:
Un détail important est que les instances renvoyées sont immuables. Au-delà de cela, les méthodes d’usine présentent plusieurs avantages en termes d’efficacité spatiale et de sécurité du filetage.
Ce sujet est exploré dans cet article.,
initialisation à double Accolade
à plusieurs endroits, nous pouvons trouver une méthode appelée initialisation à double Accolade, qui ressemble à ceci:
le nom « initialisation à double Accolade” est assez trompeur. Alors que la syntaxe peut sembler compacte et élégante, elle cache dangereusement ce qui se passe sous le capot.
Il n’y a pas réellement d’élément de syntaxe à double accolade en Java; ce sont deux blocs formatés intentionnellement de cette façon.
avec les accolades externes, nous déclarons une classe interne anonyme qui sera une sous-classe de la ArrayList., Nous pouvons déclarer les détails de notre sous-classe à l’intérieur de ces accolades.
comme d’habitude, nous pouvons utiliser des blocs d’initialisation d’instance, et c’est de là que vient la paire interne d’accolades.
La brièveté de cette syntaxe est tentant. Cependant, il est considéré comme un anti-modèle.
pour en savoir plus sur l’initialisation des doubles accolades, consultez notre article ici.
Conclusion
Moderne Java propose plusieurs options pour créer une Collection en une seule ligne. La méthode que nous choisissons est presque entièrement basée sur des préférences personnelles plutôt que sur un raisonnement technique.,
un point important à retenir est que, bien qu’il semble gracieux, l’anti-modèle d’initialisation de classe interne anonyme (aka double Accolade) a de nombreux effets secondaires négatifs.
Comme toujours, le code est disponible sur GitHub.
Get a commencé avec le Printemps 5 et le Printemps de Démarrage 2, par l’intermédiaire de l’Apprendre Printemps cours:
>> découvrez LE PARCOURS