2012-04-09 14 views
12

क्या हम जावा में स्थिर आंतरिक कक्षा को क्रमबद्ध कर सकते हैं? कक्षा को यहां स्थिर के रूप में घोषित किया गया है।स्थैतिक आंतरिक वर्ग का क्रमीकरण

+12

ठीक है, क्या होता है जब आप ... कोशिश करें? –

+1

जब मैं ऐसा करता हूं तो मेरा आवेदन ठीक काम कर रहा है। लेकिन, ऐसा होने के लिए मैं आंतरिक और बाहरी दोनों वर्गों को क्रमबद्ध कर रहा हूं, जो मेरे लिए आवश्यक नहीं है, लेकिन अगर मुझे आंतरिक वर्ग धारावाहिक है तो मुझे अवधारणा पता है तो बाहरी को धारावाहिक होना चाहिए। और, मुझे स्थिर वर्गों में कुछ संदेह भी क्रमबद्ध किया जा सकता है या नहीं। – Tinkerbel

+0

बाहरी वर्ग के पास _static_ आंतरिक वर्ग के क्रमिकरण के साथ कुछ लेना देना नहीं है। –

उत्तर

18

एक स्थिर आंतरिक वर्ग इस संबंध में शीर्ष-स्तरीय वर्ग से अलग नहीं है: इसे Serializable लागू करने के लिए घोषित किया जा सकता है (या Serializable लागू करने के लिए घोषित कक्षा का उप-वर्ग है)। साथ ही, शीर्ष-स्तरीय कक्षाओं के साथ, रन टाइम पर सीरियलाइजेशन के दौरान सामने आने वाली सभी वस्तुओं को NotSerializableException से बचने के लिए क्रमिक होना चाहिए। चूंकि आंतरिक वर्ग static है, बाहरी वर्ग की प्रकृति इस के लिए अप्रासंगिक है।

+1

सभी दोस्तों को धन्यवाद। मुझे आपके लोगों से जो चाहिए वह मिला। – Tinkerbel

0

ऐसा लगता है कि उत्तर अब जावा संस्करण द्वारा भिन्न हो सकता है।

JDK 7 में क्रमबद्धता कल्पना का कहना है:

नोट - इनर क्लासों (अर्थात, नेस्टेड वर्गों है कि स्थिर सदस्य कक्षाएं नहीं हैं), स्थानीय और अनाम कक्षाओं सहित की क्रमबद्धता, दृढ़ता से कई कारणों से हतोत्साहित किया जाता है। चूंकि गैर स्थैतिक संदर्भों में घोषित आंतरिक वर्गों में कक्षा के उदाहरणों को घेरने के लिए अंतर्निहित गैर-क्षणिक संदर्भ होते हैं, ऐसे आंतरिक वर्ग उदाहरण को क्रमबद्ध करने के परिणामस्वरूप इसके संबंधित बाहरी वर्ग के उदाहरण के क्रमिकरण भी होंगे। आंतरिक वर्गों को लागू करने के लिए जावैक (या अन्य जावाटीएम कंपाइलर्स) द्वारा उत्पन्न सिंथेटिक फ़ील्ड कार्यान्वयन निर्भर हैं और संकलक के बीच भिन्न हो सकते हैं; ऐसे क्षेत्रों में मतभेद संगतता को बाधित कर सकते हैं साथ ही विरोधाभासी डिफ़ॉल्ट serialVersionUID मानों में परिणाम भी हो सकता है। स्थानीय और अज्ञात आंतरिक कक्षाओं को सौंपा गया नाम भी कार्यान्वयन पर निर्भर है और संकलक के बीच भिन्न हो सकता है। चूंकि आंतरिक कक्षाएं संकलित-समय निरंतर फ़ील्ड के अलावा स्थिर सदस्यों की घोषणा नहीं कर सकती हैं, इसलिए वे क्रमिक फ़ील्ड को नामित करने के लिए धारावाहिक पर्सिस्टेंट फ़ील्ड तंत्र का उपयोग नहीं कर सकते हैं। अंत में, क्योंकि बाहरी उदाहरणों से जुड़े आंतरिक वर्गों में शून्य-तर्क कन्स्ट्रक्टर नहीं होते हैं (ऐसे आंतरिक वर्गों के निर्माता निहित आवृत्ति को प्रीपेड पैरामीटर के रूप में स्वीकार करते हैं), वे बाहरीकरण को लागू नहीं कर सकते हैं। हालांकि, ऊपर सूचीबद्ध मुद्दों में से कोई भी स्थिर सदस्य वर्गों पर लागू नहीं होता है।

और ओरेकल और आईबीएम जेडीके 1.7 संस्करणों के बीच ऑर्डर क्रमबद्ध करने के अनुभव से, मैं आपको बता सकता हूं कि यह हमेशा काम नहीं करता है। मैं यह सुनिश्चित नहीं कर सकता कि यह हमेशा विफल रहता है, लेकिन आप निश्चित रूप से काम करने पर भरोसा नहीं कर सकते हैं।

कोड ऐप जो मेरे ऐप में विफल नहीं हो रहा है, उत्पादन में 5 साल के लिए जेडीके 1.5 पर ठीक काम करता है और मुझे वर्तमान कथन के समान क्रमिकरण पर पिछले दस्तावेज में कुछ भी नहीं दिखाई देता है। इसलिए, यह जावा देवताओं है JDK में इस कोड पैटर्न नोट करने के लिए 7.

+3

यह प्रश्न के लिए प्रासंगिक नहीं है, जो ** स्थिर ** आंतरिक कक्षाओं को निर्दिष्ट करता है। – gerardw

1

@Tinkerbel कुछ अनुमति दी है लगता है -

स्थिर नेस्टेड कक्षाएं Serializing ठीक है, लेकिन जब (भविष्य में) अगर स्थिर इनर क्लासों कभी कर रहे हैं पुरानी वस्तुओं को क्रमबद्ध करने के बाद एक अलग बाहरी वर्ग में स्थानांतरित हो गया है।

सभी फ़ील्ड डिफ़ॉल्ट/शून्य होने के लिए असाइन किए गए हैं।

+0

अगर कोई समझा सकता है तो यह सहायक होगा क्यों?मैंने देखा है कि मेरे पास एक बहुत ही ठोस कारण नहीं है ... ऐसा लगता है कि जब भी कोई पैकेज बदल जाता है तो ऐसा होना चाहिए – user2674407

संबंधित मुद्दे