Le générateur fait intentionnellement cela pour éviter (en fait, détecter rapidement) les erreurs de frappe et de copier-coller accidentelles. En cela, il imite en fait le comportement de la fonction ImmutableMap.Builder
(qui est en fait utilisé en interne et est responsable de cette erreur).
Pour résoudre votre problème, la meilleure façon de procéder est de créer votre propre carte de hachage, de la remplir avec des valeurs dans n'importe quel ordre et avec n'importe quel nombre d'entrées dupliquées/supprimées, puis d'utiliser builder.putAllBar(hashMap)
pour l'appliquer et la transformer en carte immuable pendant la création de l'objet de valeur.
L'autre option est de ne pas utiliser Guava, le code généré utilisera alors le code ordinaire HashMap
et créera une copie défensive emballée dans Collection.unmodifiableMap
pour l'objet immuable. Utilisez @Value.Style(jdkOnly = true)
pour utiliser uniquement les collections fournies par le JDK (pour en savoir plus sur les styles, cliquez ici : http://immutables.github.io/style.html ). En utilisant une carte de hachage régulière dans un constructeur, vous éviterez l'erreur de clé dupliquée.