Pasangan Kelas Datang ke Java melalui JavaFX?

Kelas pasangan tidak asing lagi bagi kita yang telah menggunakan C ++ untuk jangka masa yang panjang. Walaupun ada pembicaraan untuk menambahkannya ke Java sebagai bagian standar dari SDK, ini adalah topik yang agak kontroversial. Beberapa orang secara resmi memintanya dan bug bahkan telah diajukan (4947273, 4983155, dan 6229146) untuk mendapatkannya di Jawa. Dalam siaran yang mengemukakan soalan Adakah kita mahukan java.util.Pair ?, Alex Miller melakukan tugas yang baik untuk merangkumi kedua-dua sisi masalah ini.

Sudah ada implementasi Pairatau yang Pairserupa dengan Java di luar sana. Selain jumlah kustom yang tidak diketahui dalam pangkalan kod tempatan, ada contoh yang tersedia untuk umum seperti contoh yang disediakan oleh Post Java Pair Class, contoh yang disediakan dalam benang StackOverflow, Ideograph's Generic Pair, dan (tidak mengejutkan) Java Tuples's Pair. SDK Android juga mempunyai kelas Pair. Yang paling mengejutkan saya ialah wujudnya kelas javafx.util.Pair JavaFX 2.0.

Pakej dan nama kelas yang paling sering dicadangkan untuk versi SDK daripada Pairkelas telah java.util.Pairdan versi JavaFX adalah sama dalam nama pakej: javafx.util.Pair. Menjalankan javap terhadap kelas ini di JavaFX SDK, membawa kepada output berikut.

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

Seperti di atas javapoutput menunjukkan, ini adalah kelas yang agak mudah dengan pembina asas parameterized, "mendapatkan" kaedah untuk kunci dan nilai bahagian-bahagian Pair, dan "bersama" kaedah toString(), equals(Object)dan hashCode(). Penyenaraian kod seterusnya menunjukkan penggunaan konstruktor parameter untuk memberikan kunci dan nilai untuk setiap kejadian Pairyang disusun.

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

Mengakses kunci dan nilai masing-masing Pairjuga mudah seperti yang ditunjukkan dalam contoh kod seterusnya.

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

Contoh di atas agak dibuat-buat, tetapi dapat dikatakan sebagai penggunaan yang paling efektif Pairkerana, dalam contoh tersebut, konsep ini adalah "pasangan" yang diwakili. Salah satu keluhan terbesar tentang menambahkan Pairke SDK atau menggunakannya secara umum adalah bahawa ia tidak dinamakan cukup khusus untuk menutup tujuan perniagaan untuk keberadaan objek. Saya sebenarnya pernah berfikir untuk menggunakan Pairkelas JavaFX ketika saya menulis contoh Pokok Krismas saya untuk tulisan JavaFX 2.0 Christmas Tree (JavaFX 2.0 Shapes). Saya akhirnya memutuskan untuk menentang ini dan menggunakan Coordinatekelas bersarang yang lebih sesuai . Namun, saya boleh menggunakan Paircontoh itu dengan mudah. Penyenaraian kod seterusnya mengandungi contoh yang sama dengan Coordinatekelas bersarang dikeluarkan dan rujukan kepadanya digantikan olehPair.