महत्वपूर्ण नोट: प्रश्न प्रस्ताव के संबंध में था। यह वाक्यविन्यास नहीं चुना गया था। इस क्यू/ए को "ऐतिहासिक संदर्भ" के रूप में देखें।
इस वाक्य रचना गिलाड ब्राचा, नील Gafter, जेम्स गोसलिंग, और पीटर वॉन डेर Ahe से BGGA-proposal में वर्णित है।
कोड के इस स्निपेट इस प्रकार कहा जा सकता है:
यह दूसरा तर्क के रूप में एक समारोह मापदंडों (T, T)
लेने और Number
लौटने लेता है (और यह प्रदान करती है block
पैरामीटर के लिए)
यह तो इसमें से Comparator<T>
बनाता है। यह compare
विधि को block
पर कॉल करने के लिए इसे प्रतिनिधि द्वारा कार्यान्वित करके करता है।
इस तुलनित्र को Collections.sort
विधि पर पास करता है।
यहाँ वाक्य रचना के नीचे एक ब्रेक आता है:
public static <T> void sort(List<T> l, final {T, T=>Number} block) {
^^^^^^^^^^^^^^^^^^^^
एक तर्क block
प्रकार "समारोह है कि दो T
लेता है और एक Number
रिटर्न" की है जो कहा जाता है।
Collections.sort(l, new Comparator<T>() {
public int compare(T arg0, T arg1) {
...
}
}
}
Comparator
दूसरा तर्क के रूप में की एक अनाम उपवर्ग का एक उदाहरण के साथ Collections.sort
लिए एक साधारण कॉल ...
...
return block.invoke(arg0, arg1);
...
... जो संख्या समारोह block
तर्क द्वारा परिभाषित द्वारा गणना रिटर्न ।
शास्त्रीय जावा के मामले में
रखें, अपने टुकड़ा
interface Block<T> {
public int invoke(T arg1, T arg2);
}
class Test {
public static <T> void sort(List<T> l, final Block<T> block) {
Collections.sort(l, new Comparator<T>() {
public int compare(T arg0, T arg1) {
return block.invoke(arg0, arg1);
}
});
}
}
जावा 7 की तरह कुछ के अनुरूप बंद नहीं है जाएगा। बंद करने के लिए समर्थन जावा 8 को स्थगित कर दिया गया है। – axtavt
तकनीकी रूप से आंतरिक कक्षाएं बंद हैं (वे एक संलग्न क्षेत्र के पहचानकर्ताओं तक पहुंच के साथ कार्यों को परिभाषित करते हैं)। जावा 7 के पास * सुरुचिपूर्ण * बंद नहीं है। –