2011-10-15 5 views
7

Est-il possible d'écrire un Hashtable static final en java en paires de valeurs clés comme vous pouvez initialiser un tableau de chaînes facilement que:écrire un Hashtable statique initialisé avec élégance

String [] foo = {"A","AB"}; 

Fondamentalement, ce que je veux dire est de ne pas avoir pour écrire les mots « mettre » pour la clé: des paires de valeurs mais peut-être quelque chose comme:

Hashtable<String, String> foo = {"JJ":"222","KK":"222"} 

qui l'OMI semble plus élégante.

(je sais que l'initialisation devrait être dans un bloc statique. Je quittais que pour l'instant)

Répondre

7

Non, Java n'a pas de carte littéraux, mais il a littéraux de tableau.

static final Map<String, String> map; 

static { 
    map = new HashMap<String, String>(); 
    String[][] pairs = { 
     {"foo", "bar"}, 
     {"x", "y"} 
    }; 
    for (String[] pair : pairs) { 
     map.put(pair[0], pair[1]); 
    } 
} 

Bien sûr, cela n'ajoute pas vraiment quoi que ce soit à la copie simple et coller put solution, et il ne fonctionne pas bien si vos types de clés et la valeur ne sont pas les mêmes.

-1

Non, vous cherchez quelque chose comme C# 's collection initializers, qui n'existe pas actuellement en Java .

Vous pouvez utiliser une classe anonyme pour enregistrer un peu de texte, mais vous devez toujours écrire put.

7

Vous pouvez utiliser de la goyave ImmutableMap:

map = ImmutableMap.of(key1, value1, key2, value2); 
+0

+1 Bonne source: D –

8

Une classe interne anonyme vous donnera à double initialisation des accolades, ce qui est utile dans certains cas:

static final Map<String, String> map = new HashMap<String, String>() {{ 
    put("foo", "bar"); 
    put("x", "y"); 
}}; 

Dans tous les cas, la réponse de @ michael667 est probablement le meilleur

+0

Solution préférée: Déplace le code initial juste en dessous de la variable statique. Peu importe ce que vous faites avec le formatage automatique du code source (Trier les membres). Utilise uniquement les librairies Java standard. –

Questions connexes