138 votes

Meilleur moyen 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 génère cet avertissement: Type safety: transtypage non contrôlé de Map to HashMap

Quel est le meilleur moyen de créer cette carte vide?

276voto

Jonik Points 18905

1) Si la Carte peut être immuable:

Collections.emptyMap();

// or, in some cases:
Collections.<String,String>emptyMap();

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:

public void foobar(Map<String,String> map){ ... }

Lors du passage de la Carte vide directement, vous devez être explicite sur le type:

foobar(Collections.emptyMap());                // doesn't compile
foobar(Collections.<String,String>emptyMap()); // works fine

2) Si vous avez besoin d'être en mesure de modifier la Carte, par exemple:

new HashMap<String,String>();

(comme tehblanx souligné)


Addendum: si votre projet utilise la Goyave, vous avez les possibilités suivantes:

1) Immuable de la carte:

ImmutableMap.of();
// or:
ImmutableMap.<String, String>of();

Accordé, pas de gros avantages par rapport à l' Collections.emptyMap(). À partir de la Javadoc:

Cette carte se comporte et effectue comparable à Collections.emptyMap(), et il est préférable principalement pour des raisons de cohérence et de facilité de maintenance de vos code.

2) la Carte que vous pouvez modifier:

Maps.newHashMap();
// or:
Maps.<String, String>newHashMap();

Maps contient similaire usine méthodes pour l'instanciation d'autres types de cartes, comme TreeMap ou LinkedHashMap.

19voto

basszero Points 14539

14voto

TofuBeer Points 32441

10voto

AndreiM Points 2495

Si vous avez besoin d'une instance de HashMap, le meilleur moyen est:

 fileParameters = new HashMap<String,String>();
 

Comme Map est une interface, vous devez choisir une classe qui l'instancie si vous souhaitez créer une instance vide. HashMap semble aussi bon que n'importe quel autre, alors utilisez-le.

7voto

Peter Štibraný Points 17507

Soit Collections.emptyMap() , ou si l’inférence de type ne fonctionne pas dans votre cas,
Collections.<String, String>emptyMap()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X