java - जावा और क्लोजर में अनाम कक्षाओं के बीच क्या अंतर है?




closures terminology (2)

ऐसा लगता है कि अनाम वर्ग बंद होने की बुनियादी कार्यक्षमता प्रदान करता है, क्या यह सच है?


IMHO, वे एक समान उद्देश्य की सेवा करते हैं, हालांकि एक बंद का उद्देश्य अधिक संक्षिप्त होना है और संभावित रूप से अधिक कार्यक्षमता प्रदान करना है।

कहते हैं कि आप अनाम वर्ग का उपयोग करके स्थानीय चर का उपयोग करना चाहते हैं।

final int[] i = { 0 };
final double[] d = { 0.0 };

Runnable run = new Runnable() { 
    public void run() {
        d[0] = i[0] * 1.5;
    }
};
executor.submit(run);

क्लोज़र आपको बॉयलर प्लेट कोडिंग की सबसे अधिक आवश्यकता से बचने की अनुमति देता है, ताकि आप सिर्फ वही लिख सकें जो इरादा है।

int i = 0;
double d = 0.0;

Runnable run = { => d = i * 1.5; };
executor.submit(run);

या और भी

executor.submit({ => d = i * 1.5; });

या यदि बंद समर्थन कोड ब्लॉक करता है।

executor.submit() {
    d = i * 1.5; 
}

जहां तक ​​वे दोनों "निजी" स्कूपिंग को बहुत सीमित अर्थों में प्रभावित करते हैं, हां। हालाँकि, वहाँ बहुत सारे मतभेद हैं कि जवाब नहीं भी हो सकता है।

चूंकि जावा में कोड के ब्लॉक को सही R-मान के रूप में संभालने की क्षमता का अभाव है, इसलिए आंतरिक वर्ग कोड के ब्लॉक को पारित नहीं कर सकते हैं जैसा कि आमतौर पर निरंतरता में किया जाता है। इसलिए एक निरंतरता तकनीक के रूप में बंद पूरी तरह से गायब है।

जबकि एक वर्ग के जीवन का कचरा एकत्र किया जाता है, जो कि भीतर के वर्गों को धारण करने वाले लोगों द्वारा बढ़ाया जाता है (इसी तरह बंद होने के दौरान इसे जीवित रखने के लिए चर को बंद करते हुए), जावा की बाइंडिंग के माध्यम से नाम बदलने की क्षमता मौजूदा जावा सिंटैक्स के अनुपालन तक सीमित है ।

और जावा के थ्रेड कंटेम्पशन मॉडल का उपयोग करके थ्रेड्स को एक दूसरे के डेटा पर ठीक से स्टैम्प न करने की अनुमति देने के लिए, आंतरिक कक्षाओं को डेटा तक पहुंच के साथ प्रतिबंधित किया जाता है जो कि परेशान नहीं है, उर्फ ​​अंतिम लोकल।

यह पूरी तरह से अन्य आंतरिक वर्गों (उर्फ स्टेटिक इनर क्लासेस) को नजरअंदाज कर देता है, जो थोड़ा अलग है। दूसरे शब्दों में, यह कुछ वस्तुओं को छूता है, जो बंद हो सकती हैं, लेकिन न्यूनतम आवश्यकताओं से कम हो जाती हैं, जिन्हें ज्यादातर लोग आवश्यक रूप से बंद करने वाला कहेंगे।





anonymous-class