Classe de paire à venir en Java via JavaFX?

La classe pair est familière à ceux d'entre nous qui ont utilisé C ++ pendant une période de temps considérable. Bien qu'il ait été question de l'ajouter à Java en tant que partie standard du SDK, c'est un sujet quelque peu controversé. Plusieurs personnes l'ont formellement demandé et des bogues ont même été déposés (4947273, 4983155 et 6229146) pour l'obtenir en Java. Dans un article posant la question Voulons-nous un java.util.Pair?, Alex Miller fait un bon travail en couvrant les deux côtés du problème.

Il existe déjà des implémentations Pairou un Pairéquivalent similaire pour Java. Outre le nombre inconnu de codes personnalisés dans les bases de code local, il existe des exemples accessibles au public tels que ceux fournis par la classe de paire Java post, des exemples fournis dans un thread StackOverflow, la paire générique d'Ideograph et (sans surprise) la paire de tuples Java. Le SDK Android propose également une classe Pair. Celui qui m'a le plus surpris est l'existence de la classe javafx.util.Pair de JavaFX 2.0.

Le paquet et le nom de classe le plus souvent proposée pour une version du SDK de la Pairclasse a été java.util.Pairet la version JavaFX est similaire au nom du package: javafx.util.Pair. L'exécution de javap sur cette classe dans le SDK JavaFX conduit à la sortie suivante.

Compiled from "Pair.java" public class javafx.util.Pair { public K getKey(); public V getValue(); public javafx.util.Pair(K, V); public java.lang.String toString(); public int hashCode(); public boolean equals(java.lang.Object); } 

Comme l' javapindique la sortie ci-dessus , il s'agit d'une classe relativement simple avec un constructeur paramétré de base, des méthodes "get" pour les parties clé et valeur des Pairméthodes toString(), et "common" equals(Object), et hashCode(). La liste de code suivante illustre l'utilisation du constructeur paramétré pour fournir la clé et la valeur à chaque instance de Paircelle-ci instanciée.

 /** * Provide a collection of famous pairs. * * @return Collection of famous pairs. */ private static Collection
    
      createFamousPairs() { final Collection
     
       pairs = new ArrayList
      
       (); pairs.add(new Pair("Yin", "Yang")); pairs.add(new Pair("Action", "Reaction")); pairs.add(new Pair("Salt", "Pepper")); pairs.add(new Pair("Starsky", "Hutch")); pairs.add(new Pair("Fox", "Mulder")); pairs.add(new Pair("Batman", "Robin")); pairs.add(new Pair("Fred Astaire", "Ginger Rogers")); pairs.add(new Pair("Flotsam", "Jetsam")); pairs.add(new Pair("Brutus", "Nero")); pairs.add(new Pair("Tom", "Jerry")); pairs.add(new Pair("Jekyll", "Hyde")); pairs.add(new Pair("Holmes", "Watson")); pairs.add(new Pair("Mario", "Luigi")); pairs.add(new Pair("Pinky", "The Brain")); pairs.add(new Pair("Wallace", "Gromit")); return pairs; } 
      
     
    

L'accès à la clé et à la valeur de chacun Pairest également facile, comme indiqué dans l'exemple de code suivant.

 /** * Write provided collection of pairs to standard output. * * @param title Title for output written to standard output. * @param pairsToPrint Pairs to be written to standard output. */ private static void writeCollectionOfPairs( final String title, final Collection
    
      pairsToPrint) { out.println(title + ":"); for (final Pair pair : pairsToPrint) { out.println("\t" + pair.getKey() + " and " + pair.getValue()); } } 
    

L'exemple ci-dessus est relativement artificiel, mais pourrait être considéré comme une utilisation la plus efficace de Pairparce que, dans cet exemple particulier, c'est vraiment un concept de «paire» qui est représenté. L'une des plus grandes plaintes concernant l'ajout Pairau SDK ou son utilisation en général est qu'il n'est pas nommé suffisamment spécifique pour couvrir l'objectif commercial de l'existence d'un objet. J'avais en fait pensé à utiliser la Pairclasse JavaFX lorsque j'ai écrit mon exemple d'arbre de Noël pour le post JavaFX 2.0 Christmas Tree (JavaFX 2.0 Shapes). J'ai fini par me décider contre cela et j'ai utilisé une Coordinateclasse imbriquée mieux nommée . Cependant, j'aurais pu facilement l'utiliser Pairdans cet exemple. La liste de code suivante contient cet exemple avec la Coordinateclasse imbriquée supprimée et les références à celle-ci remplacées parPair.