Meilleure façon de créer une carte vide en Java
J'ai besoin de créer une carte vide.
if (fileParameters == null)
fileParameters = (HashMap<String, String>) Collections.EMPTY_MAP;
Le problème est que le code ci-dessus, produit de cet avertissement:
De sécurité de Type: Décoché projetée à partir de la Carte de HashMap
Quelle est la meilleure façon de créer cette carte vide?
- Quel est votre type déclaré pour fileParameters?
- Vous aurez probablement un ClassCastException trop.
- fileParameters devrait être une Carte et pas une HashMap.
Vous devez vous connecter pour publier un commentaire.
1) Si la Carte peut être immuable:
Vous aurez à utiliser ce dernier, parfois, quand le compilateur ne peut pas comprendre à quel type de Carte est nécessaire (ce qui est appelé l'inférence de type). Par exemple, considérons une méthode déclarée comme ceci:
Lors du passage de la Carte vide directement, vous devez être explicite sur le type:
2) Si vous avez besoin d'être en mesure de modifier la Carte, par exemple:
(comme tehblanx souligné)
Additif: Si votre projet utilise des Goyave, vous avez les possibilités suivantes:
1) Immuable carte:
Accordé, pas de gros avantages par rapport à
Collections.emptyMap()
. À partir de la Javadoc:2) Carte que vous pouvez modifier:
Cartes
contient similaire usine méthodes pour l'instanciation d'autres types de cartes, commeTreeMap
ouLinkedHashMap
.Mise à jour (2018): Sur Java 9 ou plus récent, le plus court de code pour la création d'une immuable vide de la carte est:
...à l'aide de la nouvelle commodité méthodes de fabrique de JEP 269.
Les Collections.emptyMap()
Le emptyMap méthode de la classe Collections.
Si vous avez besoin d'une instance de la table de hachage, la meilleure façon est:
Depuis la Carte est une interface, vous devez choisir une classe qui instancie si vous souhaitez créer un vide d'instance. HashMap semble aussi bonne que les autres - donc, juste l'utiliser.
Soit
Collections.emptyMap()
, ou si l'inférence de type qui ne fonctionne pas dans votre cas,Collections.<String, String>emptyMap()
Depuis dans de nombreux cas, une carte vide est utilisé pour les nuls-conception sûre, vous pouvez utiliser le
nullToEmpty
méthode utilitaire:De même pour les ensembles:
et listes:
Ce sujet :
Map<String, String> s = Collections.emptyMap();