जावा में या कि इस सुविधा का उपयोग करता है किसी भी अन्य भाषा में स्थानीय कक्षाओं का लाभ क्या है?लाभ जावा
लाभ जावा
उत्तर
वे आपको माता-पिता कक्षा से बाहर तर्क लेते हैं और इसे objectify करने देते हैं। यह कार्यक्षमता को हटा देता है जहां से यह संबंधित नहीं है और इसे अपनी कक्षा में रखता है। लेकिन क्या होगा यदि यह नया ऑब्जेक्ट केवल थोड़े समय के लिए आवश्यक है, केवल कोड के एक ब्लॉक की अवधि के लिए? ठीक है, कि जहां एक स्थानीय कक्षा में फिट बैठता है है।
यहाँ कैसे एक गुमनाम आंतरिक वर्ग, एक स्थानीय भीतरी वर्ग, और एक नियमित रूप से आंतरिक वर्ग एक कार्यक्रम में मौजूद हो सकता है, इसका एक उदाहरण। उदाहरण के एक myMethod
विधि और एक InnerClass
वर्ग MyClass
वर्ग में वर्तमान में लग रही है। चर्चा के लिए, उन वर्गों सब Runnable
इंटरफेस को लागू किया जाएगा:
public class MyClass
{
public void myMethod()
{
// Anonymous inner class
Runnable r = new Runnable() {
public void run() {}
};
// Local inner class
class LocalClass implements Runnable
{
public void run() {}
}
}
// ... //
// Inner class
class InnerClass implements Runnable
{
public void run() {}
}
}
गुमनाम आंतरिक वर्ग बस वास्तव में वर्ग को लिखने के लिए बिना एक वर्ग है कि Runnable
लागू करता है बनाने के लिए किया जा सकता है और इसका नामकरण, और krosenvold के रूप में उनके पद में उल्लेख किया गया है, इसका उपयोग जावा में "गरीब व्यक्ति के बंद होने" के रूप में किया जाता है।
उदाहरण के लिए, एक बहुत ही बहुत आसान तरीका एक गुमनाम आंतरिक वर्ग का उपयोग कर होगा एक Thread
शुरू करने के लिए:
new Thread(new Runnable() {
public void run()
{
// do stuff
}
}).start();
एक स्थानीय भीतरी वर्ग एक वर्ग है कि स्थानीय दायरे के भीतर है बनाने के लिए इस्तेमाल किया जा सकता - myMethod
के बाहर अन्य विधियों से इसे एक्सेस नहीं किया जा सकेगा।
अगर वहाँ एक और तरीका था और हम LocalClass
कि myMethod
विधि के अंदर स्थित है का एक उदाहरण करने की कोशिश की है, हम ऐसा करने में सक्षम नहीं होगा:
public void anotherMethod()
{
// LocalClass is out of scope, so it won't be found,
// therefore can't instantiate.
new Thread(new LocalClass()).start();
}
एक भीतरी वर्ग है वर्ग है कि आंतरिक वर्ग में स्थित है का हिस्सा है। तो, उदाहरण के लिए, आंतरिक वर्ग InnerClass
अन्य वर्गों से MyClass.InnerClass
द्वारा पहुँचा जा सकता। बेशक, इसका मतलब यह भी है कि MyClass
में एक और विधि एक भीतरी कक्षा को तुरंत चालू कर सकती है।
public void myMethod()
{
// Variable to access from anonymous and local inner classes.
final int myNumber = 42;
// Anonymous inner class
Runnable r = new Runnable() {
public void run()
{
System.out.println(myNumber); // Works
}
};
// Local inner class
class LocalClass implements Runnable
{
public void run()
{
System.out.println(myNumber); // Works
}
}
// ... //
तो, फायदे क्या हैं:
public void anotherMethod()
{
// InnerClass is part of this MyClass. Perfectly instantiable.
new Thread(new InnerClass()).start();
}
गुमनाम आंतरिक वर्ग और स्थानीय भीतरी वर्ग के बारे में एक और बात यह है कि यह final
चर जो myMethod
घोषित किये गए हैं का उपयोग करने में सक्षम हो जाएगा है? अज्ञात आंतरिक कक्षाओं और स्थानीय आंतरिक कक्षाओं का उपयोग एक अलग पूर्ण उड़ा हुआ आंतरिक वर्ग या कक्षा होने के बजाय पूर्व को final
चर तक पहुंचने की अनुमति देता है जिसमें वे घोषित किए जाते हैं, और साथ ही, कक्षाएं स्थानीय हैं विधि स्वयं, इसलिए इसे उसी वर्ग के भीतर बाहरी कक्षाओं और अन्य विधियों से नहीं पहुंचा जा सकता है।
चीजें हैं जो आप स्थानीय कक्षाओं कि आप अनाम भीतरी वर्गों के साथ नहीं मिलता है के साथ कर सकते की एक संख्या हैं।
- क्योंकि प्रकार एक नाम है, आप और अधिक उपयोगी महाप्रकार
- किसी दिए गए नाम ढेर कर सकते हैं आसान निशान एक आधार की तुलना में अधिक का पालन करने के (विशेष रूप से ताला वस्तुओं के लिए)
- उप-प्रकार में नहीं सदस्य जोड़ सकते हैं टाइप एक से अधिक जगह में
- निर्माण, और कई निर्माताओं
दूसरी ओर वे कुछ घोर रूप से वर्बोज़ वाक्य रचना भी मेसियर बनाते हैं।
# 2 और # 3 एकमात्र कारण हैं जिन्हें मैंने कभी भी व्यक्तिगत रूप से उपयोग किया है। –
(यदि यह # 1 जैसा नहीं है) जैसे उनके नाम हैं, तो आप उन्हें बार-बार उपयोग कर सकते हैं। इसके अलावा, बिंदु 3 अच्छा है। –
- 1. 64 बिट जावा प्लेटफ़ॉर्म के लाभ
- 2. पुल पैटर्न - जावा में संकलन का लाभ?
- 3. लाभ
- 4. जेनेरिक कन्स्ट्रक्टर्स का लाभ
- 5. जावास्क्रिप्ट इंजन लाभ
- 6. डबल ब्रेस प्रारंभिकरण - लाभ
- 7. लाभ Application_Error
- 8. लाभ :: mATX
- 9. जावा थ्रेड के रन पर सार्वजनिक संशोधक के लाभ()
- 10. जावा सिंगलटन बनाम स्थिर - क्या वास्तविक प्रदर्शन लाभ है?
- 11. जावा नियमित अभिव्यक्ति कोई प्रदर्शन लाभ प्रदान करता है?
- 12. एरलैंग के लाभ (कुछ ऐसा) node.js पर लाभ?
- 13. स्कोपिंग ब्लॉक के लाभ?
- 14. आरंभिक सूचियों के लाभ
- 15. लाभ (@cn कर्सर घोषित)
- 16. MySQL Enum प्रदर्शन लाभ?
- 17. एचटीएमएल 5 टैग लाभ
- 18. पीएचपी नेमस्पेसिंग लाभ
- 19. ध्वनि पिच पैन लाभ?
- 20. प्रदर्शन लाभ/सी ++
- 21. बीटीआरई का लाभ?
- 22. आवेदक प्रोग्रामिंग के लाभ
- 23. कमजोर संदर्भ लाभ
- 24. लाभ की जगह (@href)
- 25. लाभ का निर्माण
- 26. PHP कॉन्स्टेंट्स: लाभ/नुकसान
- 27. लाभ WEBGET को
- 28. सिंगल रूट क्लास पदानुक्रम का लाभ
- 29. लाभदायक तरीकों के लाभ और कमी?
- 30. सीखने की योजना के लाभ?
यह ऑब्जेक्ट इंस्टेंस की अवधि इतनी अधिक नहीं है, लेकिन इसका दायरा है। यदि वर्ग को केवल मूल वर्ग के लिए दृश्यमान होने की आवश्यकता है, तो इसे स्थानीय बनाने से इसे कहीं और इस्तेमाल होने से रोका जाएगा। साथ ही, स्थानीय वर्ग माता-पिता के निजी सदस्यों को देख सकता है - एक गैर-स्थानीय वर्ग ऐसा नहीं कर सकता है। – belugabob
@belugabob: 1. स्थानीय कक्षाओं का उपयोग केवल उस विधि या निर्माता के अंदर किया जा सकता है जिसमें उन्हें परिभाषित किया गया है। वे संलग्न वर्ग के लिए भी दिखाई नहीं दे रहे हैं। 2. नेस्टेड/भीतरी कक्षाएं संलग्न कक्षा के निजी चर भी देख सकती हैं। –