Goyave a qu'avec son ImmutableMap
:
final Map<Foo, Bar> map = ImmutableMap.of(foo1, bar1, foo2, bar2, etc, etc);
Bonus: le nom de ImmutableMap
n'est pas un mensonge;)
Notez que Il existe 5 versions de la méthode .of()
, donc jusqu'à 5 paires clé/valeur. Une façon plus générique est d'utiliser un constructeur:
final Map<Foo, Bar> map = ImmutableMap.<Foo, Bar>builder()
.put(foo1, bar1)
.put(foo2, bar2)
.put(foo3, bar3)
.put(etc, etc)
.build();
Notez, cependant: cette carte ne accepte les clés nulles ou des valeurs.
Alternativement, voici une version pauvre de ImmutableMap
. Il utilise un modèle de générateur classique. Notez qu'il ne vérifie pas les valeurs NULL:
public final class MapBuilder<K, V>
{
private final Map<K, V> map = new HashMap<K, V>();
public MapBuilder<K, V> put(final K key, final V value)
{
map.put(key, value);
return this;
}
public Map<K, V> build()
{
// Return a mutable copy, so that the builder can be reused
return new HashMap<K, V>(map);
}
public Map<K, V> immutable()
{
// Return a copy wrapped into Collections.unmodifiableMap()
return Collections.unmodifiableMap(build());
}
}
vous pouvez utiliser:
final Map<K, V> map = new MapBuilder<K, V>().put(...).put(...).immutable();
Goyave a que voir mon answer – fge
Si vous voulez une solution JDK uniquement, vous pouvez écrire une classe simple pour cela, mais ce serait très limité. – Djon
@Djon il est actuellement assez facile de mettre en œuvre un constructeur, voir ma réponse – fge