Paarklasse Kommen Sie über JavaFX nach Java?

Die Paarklasse ist denjenigen von uns bekannt, die C ++ längere Zeit verwendet haben. Obwohl die Rede davon war, es als Standardbestandteil des SDK zu Java hinzuzufügen, ist es ein etwas kontroverses Thema. Mehrere Leute haben es offiziell angefordert und es wurden sogar Fehler gemeldet (4947273, 4983155 und 6229146), um es in Java zu bekommen. In einem Beitrag mit der Frage "Wollen wir ein java.util.Pair?" Deckt Alex Miller beide Seiten des Problems gut ab.

Es gibt bereits Implementierungen Pairoder ein Pairähnliches Äquivalent für Java. Neben der unbekannten Anzahl von benutzerdefinierten in lokalen Codebasen gibt es öffentlich verfügbare Beispiele, wie sie von der Post-Java-Pair-Klasse bereitgestellt werden, Beispiele, die in einem StackOverflow-Thread bereitgestellt werden, Ideographs generisches Paar und (keine Überraschung) Java-Tupel-Paar. Das Android SDK bietet auch eine Pair-Klasse. Das, was mich am meisten überrascht hat, ist die Existenz der javafx.util.Pair-Klasse von JavaFX 2.0.

Der für eine SDK-Version der PairKlasse am häufigsten vorgeschlagene Paket- und Klassenname war java.util.Pairund die JavaFX-Version ähnelt im Paketnamen : javafx.util.Pair. Das Ausführen von Javap für diese Klasse im JavaFX SDK führt zu der folgenden Ausgabe.

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); } 

Wie die obige javapAusgabe zeigt, ist dies eine relativ einfache Klasse mit einem Grunde parametrisierten Konstruktor, Methoden für den Schlüssel und Wertanteile der „get“ Pairund „gemeinsamen“ -Methoden toString(), equals(Object)und hashCode(). Die nächste Codeliste zeigt die Verwendung des parametrisierten Konstruktors, um den Schlüssel und den Wert für jede Instanz bereitzustellen, die Pairinstanziiert wird.

 /** * 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; } 
      
     
    

Der Zugriff auf den Schlüssel und den Wert jedes einzelnen Pairist ebenfalls einfach, wie im nächsten Codebeispiel gezeigt.

 /** * 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()); } } 
    

Das obige Beispiel ist relativ erfunden, könnte jedoch als eine äußerst effektive Verwendung angesehen werden, Pairda es sich in diesem speziellen Beispiel tatsächlich um ein "Paar" -Konzept handelt, das dargestellt wird. Eine der größten Beschwerden über das Hinzufügen Pairzum SDK oder die Verwendung im Allgemeinen ist, dass es nicht spezifisch genug benannt ist, um den Geschäftszweck für die Existenz eines Objekts abzudecken. Ich hatte tatsächlich über die Verwendung der JavaFX- PairKlasse nachgedacht, als ich mein Weihnachtsbaum-Beispiel für den Beitrag JavaFX 2.0 Christmas Tree (JavaFX 2.0 Shapes) schrieb. Am Ende habe ich mich dagegen entschieden und eine besser benannte verschachtelte CoordinateKlasse verwendet. In Pairdiesem Beispiel hätte ich es jedoch leicht verwenden können . Die nächste Codeliste enthält genau dieses Beispiel, wobei die verschachtelte CoordinateKlasse entfernt und Verweise darauf durch ersetzt wurdenPair.