2017-12-21 125 views
5

सोनारयदि मूल्य कभी भी अपनी ऑब्जेक्ट पहचान पर निर्भर नहीं है तो मूल्य आधारित वस्तुओं को क्रमबद्ध करना ठीक है?

मेक इस मूल्य आधारित क्षेत्र क्षणिक तो यह इस वर्ग के क्रमबद्धता में शामिल नहीं है पता चलता है।

यह एक भविष्य-सबूत बग है जब मूल्य-आधारित कक्षा जारी की जाएगी।

तो, यदि एप्लिकेशन कभी भी अपनी ऑब्जेक्ट पहचान पर निर्भर नहीं करता है तो क्या मैं मूल्य-आधारित वस्तुओं को गैर-क्षणिक बना सकता हूं?

उत्तर

6

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

यदि डिजाइनर एक वर्ग को मूल्य-आधारित होने और Serializable लागू करने की घोषणा करता है, तो वे मानते हैं कि मूल्य आधारित कक्षाएं और सीरियलाइजेशन संगत हैं और ऐसा ही रहेंगे।

हम नहीं जानते कि अंतिम मूल्य प्रकार कार्यान्वयन कैसा दिखाई देगा, लेकिन जेआरई डेवलपर्स द्वारा प्रदान किए गए माइग्रेशन पथ, उदा। the immutable lists, being value based and serializable पेश करते समय, यह मानने के बजाय लिया जाना चाहिए कि विनिर्देशों से परे अतिरिक्त नियम और बाधाएं हैं।

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

+0

मेरा छोटा मस्तिष्क इसे पचता नहीं है, इसलिए मूल रूप से हम कहते हैं कि ये मूल्य प्रकार हैं + वे 'सीरियलज़ेबल' लागू करते हैं => कभी भी उनकी पहचान ('=='?) के माध्यम से भरोसा नहीं करते हैं, इसके बजाय बराबर का उपयोग करते हैं? – Eugene

+3

@ यूजीन: हमेशा '==' के बजाय 'बराबर' का उपयोग सामान्य रूप से मूल्य प्रकारों पर लागू होता है। अब, सीरियलाइजेशन पहले से ही सामने आने वाली वस्तुओं के बैक-रेफरेंस का उपयोग करके पहचानों को स्टोर करता है और पुनर्स्थापित करता है, लेकिन चूंकि मान प्रकारों में एक अनिर्दिष्ट पहचान होती है, तो आपको इस पर भरोसा नहीं करना चाहिए। भविष्य के संस्करण व्यवहार के रूप में व्यवहार कर सकते हैं जैसे कि 'writeUnshared' का उपयोग करना, लेकिन विपरीत भी संभव है, बराबर मान समान उदाहरण हो सकते हैं (यदि आप उन्हें अभी भी ऑब्जेक्ट्स मानते हैं) ... – Holger

+0

इस धारावाहिक मुद्दों को पढ़ने के लिए 3AM तक मुझे रखने के लिए धन्यवाद (अगर केवल एसओ मेरे बिलों का भुगतान सीधे कर सकता है ...)। इसलिए यदि मैं दो उदाहरणों को क्रमबद्ध करता हूं (जो 'समान हैं ', लेकिन' वैकल्पिक' के '==' नहीं हैं, तो मैं दो अलग-अलग उदाहरण लिखूंगा; एक मूल्य प्रकार की दुनिया में मैं सिर्फ एक लिख रहा होगा। लेकिन चूंकि वे अपरिवर्तनीय हैं, इससे कोई फर्क क्यों पड़ता है? ऐसा नहीं है कि आप दो बाद के लिखने के 'writeObject' के माध्यम से "खोया अपडेट" प्राप्त कर सकते हैं? मुझे आशा है कि मैं यहां कुछ समझूंगा – Eugene

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