Coppia classe in arrivo a Java tramite JavaFX?

La classe pair è familiare a quelli di noi che hanno utilizzato C ++ per un periodo di tempo considerevole. Sebbene si sia parlato di aggiungerlo a Java come parte standard dell'SDK, è un argomento alquanto controverso. Diverse persone l'hanno formalmente richiesto e sono stati persino segnalati bug (4947273, 4983155 e 6229146) per ottenerlo in Java. In un post che pone la domanda Vogliamo un java.util.Pair ?, Alex Miller fa un buon lavoro nel coprire entrambi i lati del problema.

Esistono già implementazioni di Pairo un Pairequivalente simile per Java. Oltre al numero sconosciuto di quelli personalizzati nelle basi di codice locali, ci sono esempi disponibili pubblicamente come quelli forniti dalla Java Pair Class post, esempi forniti in un thread StackOverflow, Ideograph's Generic Pair e (nessuna sorpresa) Java Tuples's Pair. L'SDK Android include anche una classe Pair. Quello che mi ha sorpreso di più è l'esistenza della classe javafx.util.Pair di JavaFX 2.0.

Il pacchetto e il nome della classe più spesso proposto per una versione SDK della Pairclasse è stata java.util.Paire la versione JavaFX è simile in nome del pacchetto: javafx.util.Pair. L'esecuzione di javap su questa classe nell'SDK JavaFX porta al seguente output.

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

Come javapindica l'output precedente , questa è una classe relativamente semplice con un costruttore parametrizzato di base, metodi "get" per le parti chiave e valore dei Pairmetodi toString(), e "comuni" equals(Object), e hashCode(). Il listato di codice successivo dimostra l'utilizzo del costruttore parametrizzato per fornire la chiave e il valore a ciascuna istanza di Paircui viene creata un'istanza.

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

Anche l'accesso alla chiave e al valore di ciascuno Pairè semplice, come illustrato nel prossimo esempio di codice.

 /** * 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'esempio sopra è relativamente artificioso, ma potrebbe essere considerato un uso più efficace Pairperché, in quel particolare esempio, è in realtà rappresentato un concetto di "coppia". Uno dei maggiori reclami sull'aggiunta Pairall'SDK o sul suo utilizzo in generale è che non ha un nome abbastanza specifico da coprire lo scopo aziendale per l'esistenza di un oggetto. In realtà avevo pensato di utilizzare la Pairclasse JavaFX quando ho scritto il mio esempio di albero di Natale per il post JavaFX 2.0 Christmas Tree (JavaFX 2.0 Shapes). Alla fine ho deciso di non farlo e ho usato una Coordinateclasse nidificata con un nome più appropriato . Tuttavia, avrei potuto facilmente utilizzare Pairin quell'esempio. Il listato di codice successivo contiene proprio quell'esempio con la Coordinateclasse nidificata rimossa e i riferimenti ad essa sostituiti daPair.