Je suis à la recherche d'une classe KeyValuePair en Java.
Comme java.util utilise beaucoup les interfaces, aucune implémentation concrète n'est fournie, seulement l'interface Map.Entry.
Existe-t-il une implémentation canonique que je peux importer ? C'est l'une de ces classes de "programmation pour plombiers" que je déteste implémenter 100 fois.
4 votes
Je vous déconseille d'utiliser une classe KeyValuePair générique. Il vaut mieux définir une classe spécifique au domaine avec des accesseurs plus informatifs (par exemple, getProductId(), getProductPrice()).
25 votes
@Adamski : Je ne suis pas d'accord. Nous n'utilisons pas d'outils spécifiques au domaine
Map
oList
classes, pourquoi cela devrait-il être différent ? Une KeyValuePair est simplement une Map avec une entrée.4 votes
@skaffman : Bon point, mais je pense que le concept d'un Pair générique est plus facilement ouvert à l'abus que de passer des Collections autour. Par exemple, si quelqu'un veut renvoyer deux valeurs à partir d'une méthode, il est tentant de renvoyer une Paire<X,Y> mais cela indique généralement un problème de conception sous-jacent (par exemple, pourquoi X et Y ne sont pas unifiés d'une manière ou d'une autre dans le modèle de domaine s'ils sont intrinsèquement liés ?)
13 votes
@Adamski : Parce que ce n'est pas
<X,Y>
c'est<Key,Value>
. Il ne demande pas d'arbitrairePair
type, il demande unKeyValuePair
type.3 votes
Malgré cela, je préfère de loin faire circuler une seule instance d'objet dans mon code, potentiellement avec une méthode getKey() définie ; par exemple, je préfère : processProduct(Product) à processProduct(KeyValuePair<Integer, Product>) où l'Integer est l'ID du produit. Je suis d'accord pour dire que KeyValuePair (i.e. Map.Entry) ou même une paire générique est utile dans la logique d'une méthode mais je n'aime pas qu'elle "s'échappe" comme type de retour ou qu'elle soit fournie comme paramètre de méthode ; par exemple, je ne passe jamais autour de Map.Entry.