पहला वाला केवल पढ़ने वाला फ़ील्ड है, जबकि दूसरा एक विधि के रूप में संकलित हो जाता है (और संपत्ति ProductLocation
के सभी पढ़ने को संबंधित get
विधि पर कॉल में संकलित किया जाता है और लिखता है कि इसे कॉल में संकलित किया जाता है set
विधि के लिए; आंतरिक रूप से, ये विधियां एक आंतरिक, स्वचालित रूप से जेनरेट की गई, गैर-पढ़ने-योग्य फ़ील्ड से पढ़ी/लिखेंगी)। मैं कहूंगा कि सबसे महत्वपूर्ण अंतर थ्रेड-सुरक्षा है! (कैसे? पढ़ना!)
कक्षा का मूल उपयोग बिल्कुल देखेंगे: अन्य कक्षाओं में कोड केवल मूल्य को पढ़ने में सक्षम होगा, इसे बदल नहीं पाएगा। साथ ही, मूल्य को पढ़ने के लिए कोड बिल्कुल वही दिखाई देगा (उदाहरण के लिए, print(myInstace.ProductLocation)
; यहां, आप यह नहीं बता सकते कि इसे कैसे घोषित किया गया है, ठंडा, एह?)
पहला, सबसे छोटा अंतर यह है कि संपत्ति निजी सेटर एक ही कक्षा के उदाहरणों को मूल्य को संशोधित करने की अनुमति देता है, जबकि पाठक संपत्ति के मामले में, ऑब्जेक्ट भी मूल्य को बदलने में सक्षम नहीं होगा।
अब थ्रेड-सुरक्षा के लिए।readonly
फ़ील्ड पर विशेषता कई मेमोरी (जैसे जावा के final
फ़ील्ड) के साथ काम कर रहे हैं, तो इसकी मेमोरी दृश्यता अर्थशास्त्र बदल जाएगी।
ए readonly
फ़ील्ड केवल घोषणा या निर्माता में ही असाइन किया जा सकता है। readonly
फ़ील्ड को आवंटित मान को बदला नहीं जा सकता है (कम से कम सामान्य तरीके से नहीं) और यह गारंटी है कि प्रत्येक थ्रेड कन्स्ट्रक्टर लौटने के बाद सही, प्रारंभिक मान देखेंगे। इसलिए, readonly
फ़ील्ड स्वाभाविक रूप से थ्रेड-सुरक्षित है।
संपत्ति के साथ एक ही धागे की सुरक्षा प्राप्त करने के लिए, आप अपने कोड है, जो त्रुटियां उत्पन्न हो सकती पर कुछ तुल्यकालन जोड़ने के लिए होगा। इससे मामले के आधार पर मृत-ताले, डेटा दौड़ या कम प्रदर्शन हो सकता है, और विशेष रूप से यदि आपको अनुभव नहीं होता है।
तो, अगर कुछ है कि मूल्य शब्दार्थ वस्तु के निर्माण के बाद बदला नहीं जा सकता का प्रतिनिधित्व करता है, तो आप एक निजी सेटर की घोषणा नहीं करना चाहिए (इस अर्थ होगा कि वस्तु इसे बदल सकता है)। केवल पढ़ने के लिए जाएं (और शायद इसे निजी घोषित करें और केवल एक गेटटर के साथ सार्वजनिक संपत्ति घोषित करें! यह वास्तव में पसंदीदा रूप है, क्योंकि खेतों का पर्दाफाश करना अच्छा नहीं है, केवल तरीकों का पर्दाफाश करना बेहतर है - वहां कई कारणों से this answer में इसके कारणों का स्पष्टीकरण) कर रहे हैं
मेरे लिए, सबसे महत्वपूर्ण अंतर अपरिवर्तनीय संपत्ति है क्योंकि वास्तव में कुछ अर्थपूर्ण मूल्यों का पालन करता है। – Freek