यह सार्वजनिक रूप से सार्वजनिक फ़ील्ड रखने की गलती नहीं है। ऐसा नहीं है, क्योंकि बक्षीस नोट सुझाव देता है, "ओओपी-मौलिक उल्लंघन"। इन सभी को दो वर्गों (सबसे प्रयोजनों के लिए) समान हैं के बाद:
public class DemoA {
public int field;
}
public class DemoB {
private int field;
public int getField() { return field; }
public void setField(int value) { field = value; }
}
है, कहने के लिए अगर आप इरादा कॉल प्रत्यक्ष पढ़ने के लिए के लिए और एक गेटर जोड़ने एक क्षेत्र के लिए उपयोग लिखने और सेटर बस हो सकता है अतिरिक्त बॉयलर प्लेट।
गेटर्स और सेटर्स का लाभ, भले ही वे खेतों को पढ़ने और लिखने से कोई अन्य काम न करें, यह है कि वे इस तथ्य को सारणी देते हैं कि डेटा किसी भी क्षेत्र में संग्रहीत है। इसे बाहरी डेटा स्रोत में संग्रहीत किया जा सकता है, या फ्लाई पर गणना की जा सकती है, या जो भी आप चाहें, और कॉलर्स को इस बारे में चिंता करने की ज़रूरत नहीं है कि व्यवहार कैसे लागू किया जाता है। यह निश्चित रूप से सामान्य में एक अच्छा अभ्यास है क्योंकि यह आपकी चिंताओं (कार्यान्वयन) से कॉलर्स चिंताओं (एपीआई) को अलग करता है।
हालांकि कभी-कभी यह केवल ओवरकिल होता है, और सार्वजनिक कॉलकों का खुलासा करना बिल्कुल उचित है यदि आपके कॉलर्स की आवश्यकता को प्रदान करने का यह सबसे अच्छा तरीका है। अक्सर, यह value types के लिए किया जाता है, जो कक्षाएं मौजूद हैं, केवल एक साथ कई फ़ील्ड समूह करने के लिए। गेटर्स और सेटर्स के स्कोर लिखने के लिए बहुत कम लाभ होता है जब आपको कक्षा बनाने की ज़रूरत होती है, केवल फ़ील्ड को सार्वजनिक करके पूरा किया जा सकता है।
एक व्यावहारिक मामले के रूप में, एंड्रॉइड की एक अतिरिक्त चिंता है। विधि कॉल महंगे हैं और ऐप (आसानी से) परिभाषित करने की विधियों की संख्या limited to ~65k है। ऐसे मामलों के लिए जहां ऐसा करना सुरक्षित है, एक क्षेत्र को उजागर करने से विधि को ओवरहेड दो से कम कर देता है और मूल्यवान CPU समय बचाता है। यह बहुत कुछ प्रतीत नहीं होता है, लेकिन यह जल्दी से जोड़ता है। developer.android.com से इस खंड
आप हमसे क्यों पूछ रहे हैं? लेखकों से पूछो। वे क्नोव्स। – EJP
@EJP उन्होंने कहा कि उन्होंने जानबूझकर एंड्रॉइड इश्यू ट्रैकर में किया था। (उन्होंने निजी के बजाय सार्वजनिक + '@ hide' का उपयोग किया) मेरे पास एंड्रॉइड डेवलपर्स के लिए कोई व्यक्तिगत संपर्क नहीं है, और मुझे लगता है कि एंड्रॉइड इश्यू ट्रैकर क्यू एंड ए के लिए नहीं है। –
प्रदर्शन कारणों की अधिक संभावना है, यानी अन्य पैकेजों से कक्षाओं को कुछ महत्वपूर्ण पथों पर पहुंचने की आवश्यकता है। दरअसल 'android.widget.ListView' इसे 'DrawChild (कैनवास कैनवास, देखें बच्चे, लंबे ड्राइंगटाइम) में संदर्भित करता है। लेकिन आधिकारिक आंकड़ों से कोई टिप्पणी के बिना यह सिर्फ एक अनुमान है। – Kai