क्यों ConcurrentHashMap.Segment
और ConcurrentHashMap.HashEntry
कक्षाएं स्थैतिक हैं? इसे इस तरह से क्यों डिज़ाइन किया गया है?क्यों ConcurrentHashMap.Segment और ConcurrentHashMap.HashEntry कक्षाएं स्थिर हैं?
उत्तर
@ एंड्रे, @ एडम मैं आपके द्वारा प्रस्तुत किए गए अंक से सहमत हूं लेकिन असली जावा पुस्तक से मुझे वास्तविक उत्तर मिला है। आइटम # 22 गैरस्टिक पर स्थिर सदस्य वर्गों का पक्ष लें।
निजी स्थिर सदस्य वर्गों के एक आम उपयोग, वस्तु उनके enclosing class.For उदाहरण के प्रतिनिधित्व की घटकों का प्रतिनिधित्व एक मानचित्र उदाहरण है, जो मानों वाली कुंजियों एकत्रित करती है विचार करना है। कई मानचित्र कार्यान्वयन में मानचित्र में प्रत्येक कुंजी-मूल्य जोड़ी के लिए एक आंतरिक प्रविष्टि ऑब्जेक्ट है। जबकि प्रत्येक प्रविष्टि एक मानचित्र से जुड़ी है, किसी प्रविष्टि (getKey, getValue, और setValue) पर विधियों को मानचित्र तक पहुंच की आवश्यकता नहीं है। इसलिए, प्रविष्टियों का प्रतिनिधित्व करने के लिए एक गैरस्टिक सदस्य वर्ग का उपयोग करना अपर्याप्त होगा: एक निजी स्थैतिक सदस्य वर्ग सर्वोत्तम है।
आप एक सदस्य वर्ग है कि एक के लिए उपयोग उदाहरण संलग्न की आवश्यकता नहीं है की घोषणा करते हैं, तो हमेशा अपने declaration.If आप इस संशोधक छोड़ में स्थिर संशोधक शब्दों में कहें, प्रत्येक उदाहरण इसका आवरण उदाहरण के लिए एक बाहरी संदर्भ होगा
आइटम # 22 से बहुत अच्छी चीजें मिलीं लेकिन ऊपर मुख्य बिंदु हैं।
असल में सभी आंतरिक कक्षाएं जिन्हें उनके संलग्न वर्गों के गुणों का उपयोग करने की आवश्यकता नहीं है, उन्हें static
माना जाना चाहिए। यह जावा में सामान्य सिद्धांत से आता है जो कहता है कि प्रत्येक वस्तु को कम से कम संभव अन्य वस्तुओं तक पहुंच प्राप्त होनी चाहिए।
प्रत्येक भीतरी गैर स्थैतिक कक्षा एक अदृश्य क्षेत्र this$
जो संदर्भ देता है कि उसे अपने जनक वस्तु (ConcurrentHashMap
) जो इकाई (Segment
या HashEntry
) प्रति 8 बाइट्स की एक ओवरहेड बनाता है शामिल हैं। इस प्रकार माता-पिता के वर्ग फ़ील्ड का उपयोग किया जाता है - आंतरिक वर्ग किसी भी प्रकार के सिंटैक्स चीनी में होता है जो एक कंटेनर (जैसे माता-पिता) से संबंधित होता है।
यही कारण है कि जब संभव हो तो आंतरिक कक्षाएं स्थिर आंतरिक कक्षाओं के साथ प्रतिस्थापित की जानी चाहिए।
यह एक अच्छा मुद्दा है, लेकिन यदि यही कारण है कि यह वर्ग निजी नहीं है? – Vipin
यह पैकेज-लोकल है जो पैकेज के लिए निजी जैसा है। मुझे नहीं पता कि उनका इरादा क्या था, लेकिन आम तौर पर निजी संस्थाओं को इकाई-परीक्षण के लिए पैकेज-लोकल बनाया जाता है ताकि कोई उन्हें एक अलग वर्ग (यूनिट टेस्ट) से एक्सेस कर सके। –
शायद परीक्षण के उद्देश्य के लिए केवल जावा लोग डिजाइन के साथ नहीं खेलेंगे, मुझे नहीं पता कि लेखक डौग ली से कैसे पूछ सकते हैं। – Vipin
आंतरिक स्थिर वर्ग में एक सुंदर विशेषता है कि वे आलसी लोड किए गए हैं क्योंकि इसे Bill Pugh Singleton कार्यान्वयन में बताया गया है, जब हम सिंगलटन पैटर्न को लागू करते हैं।
स्थिर आंतरिक कक्षा प्रदान करता है अन्य विशेषताएं यह है कि बाहरी आवृत्ति चर उपलब्ध नहीं हैं। यहां से, हम गैर स्थैतिक तरीकों तक पहुंच नहीं सकते हैं। उस स्थिर वर्ग को शुरू करने के लिए अलग-अलग उदाहरण बनाने की आवश्यकता नहीं है, सीधे ClassName.InnerStaticClass.method()
का उपयोग करके, विधि को बुलाया जा सकता है।
- 1. सी # कक्षाएं - इतनी सारी स्थिर विधियां क्यों?
- 2. सार कक्षाएं और इंटरफेस क्यों बनाते हैं?
- 3. अंतरफलक स्थिर क्यों हैं?
- 4. Array.Sort() और Array.IndexOf() विधियों स्थिर क्यों हैं?
- 5. वैश्विक स्थैतिक कक्षाएं और विधियां खराब हैं?
- 6. डेल्फी में स्थिर कक्षाएं (Win32)
- 7. java.util.Date और java.sql.Date में दो दिनांक कक्षाएं क्यों हैं?
- 8. NSManagedObject और NSEntity डिस्क्रिप्शन अलग-अलग कक्षाएं क्यों हैं?
- 9. सिम्पी कक्षाएं शून्य, एक और नकारात्मक, वे क्यों मौजूद हैं?
- 10. स्थिर आंतरिक कक्षाएं एक अच्छा विचार या खराब डिजाइन हैं?
- 11. आंतरिक कक्षाएं निजी तरीकों को सुलभ क्यों बनाती हैं?
- 12. स्कैला - कक्षाएं पर्याप्त हैं?
- 13. int [] और स्ट्रिंग [] कक्षाएं कहां परिभाषित हैं?
- 14. स्थिर वर्गों में केवल स्थिर सदस्य क्यों हो सकते हैं?
- 15. डाटा रिपॉजिटरीज स्थिर क्यों नहीं हैं?
- 16. जावा कक्षाएं ऑब्जेक्ट्स हैं?
- 17. ऑर्डरबी और ऑर्डरबैडसेकिंग स्थिर हैं?
- 18. विस्तार कक्षाएं और उदाहरण
- 19. गणित वर्ग के तरीके क्यों स्थिर हैं?
- 20. जावा: प्रिंटवाइटर या प्रिंटस्ट्रीम कक्षाएं अपवाद क्यों नहीं फेंकती हैं?
- 21. सिंगलटन कक्षाएं
- 22. PHP कक्षाएं सार्वजनिक कीवर्ड का उपयोग क्यों करती हैं?
- 23. std :: fstream कक्षाएं std :: string क्यों नहीं लेती हैं?
- 24. ऐप इंजन - फ़ोन नंबर, लिंक, रेटिंग आदि कक्षाएं क्यों हैं?
- 25. समान नामों के साथ स्थिर विधियों के स्थिर आयात क्यों वैध हैं?
- 26. एस 1 और एस 2 कक्षाएं क्या हैं?
- 27. क्यों एक गैर स्थैतिक आंतरिक वर्ग में स्थिर सदस्य (फ़ील्ड और विधियां) नहीं हो सकती हैं?
- 28. अंतिम आंतरिक कक्षाएं क्या हैं?
- 29. क्या आपके कोड-प्रथम कक्षाएं आपके डोमेन कक्षाएं हैं?
- 30. टेम्पलेट कक्षाएं और सी ++
लेकिन यह किसी अन्य वर्ग से आंतरिक कक्षा तक पहुंचने की एक और संभावना को जोड़ता है। – Vipin
आप "** ** **" से क्या संदर्भित करते हैं? –
"यह" का अर्थ है इन वर्गों के वर्तमान कार्यान्वयन। सेगमेंट के लिए वर्तमान हस्ताक्षर "स्थिर अंतिम श्रेणी सेगमेंट रीन्टेंट्रॉक लॉक लागू करता है Serializabl" –
Vipin