पैकेज-निजी पहुंच स्तर protected
से अधिक प्रतिबंधित है: संरक्षित विशेषताओं और विधियों को अभी भी कक्षा को उप-वर्गीकृत करके एक्सेस किया जा सकता है। संरक्षित सदस्य (या हो सकता है) विरासत के लिए लक्षित हैं जबकि पैकेज-निजी सदस्य नहीं हैं।
पैकेज-निजी सदस्यों का अक्सर उपयोग किया जाता है ताकि पैकेज के अंदर बहुस्तरीय कक्षाएं कार्यान्वयन-विशिष्ट विशेषताएँ या (उपयोगिता) विधियों तक पहुंच सकें।
/*
* Package private constructor which shares value array for speed.
* this constructor is always expected to be called with share==true.
* a separate constructor is needed because we already have a public
* String(char[]) constructor that makes a copy of the given char[].
*/
String(char[] value, boolean share) {
// assert share : "unshared not supported";
this.value = value;
}
तो java.lang
पैकेज के अंदर कक्षाएं कुशलता से नए Strings
बना सकते हैं अगर सामग्री पहले से ही एक char[]
बिना में मौजूद है:
इस के लिए अच्छा उदाहरण String
के पैकेज-निजी निर्माता और StringBuilder.value
चार सरणी हैं समझौता सुरक्षा। आप इसे अपने आवेदन से नहीं कर सकते हैं क्योंकि यदि आप कर सकते हैं, तो आपके पास String
की आंतरिक चार सरणी तक पहुंच (संदर्भ) होगी जो अपरिवर्तनीय है (प्रतिबिंब गिनती नहीं है!)। StringBuilder
(या बल्कि AbstractStringBuilder
जहां कार्यान्वयन से आता है)
में चार सरणी वर्तमान मूल्य char[] value
और इस char[] getValue()
को एक्सेसर विधि पकड़े भी पैकेज-निजी contentEquals(StringBuffer sb)
और contentEquals(CharSequence cs)
तरह String
की तो विभिन्न उपयोगिता तरीकों के लिए इस का उपयोग कर सकते हैं "दुनिया" में आंतरिक चार सरणी को उजागर किए बिना दक्षता और तेज तुलना।
मैं देख सकता हूं कि किसी ने ऐसा क्यों कहा होगा - 'संरक्षित' संशोधक 'पैकेज निजी' जैसा ही है, सिवाय इसके कि सबक्लास को पार्टी में भी आमंत्रित किया जाता है। लेकिन अगर कोई स्वाभाविक रूप से अस्तित्व में नहीं था तो उप-वर्ग संबंध बनाना (केवल पहुंच उद्देश्यों के लिए) बनाना गलत होगा। यह आमतौर पर उदाहरण के लिए कोई समझ नहीं लेता एक 'ईमेलसेन्डर' वर्ग 'DomainObjectFilter' वर्ग या इसके विपरीत के उप-वर्ग होने के लिए। इस स्थिति में विधि को आम तौर पर 'सार्वजनिक' बनाया जाता है (शायद एक टिप्पणी के साथ कि यह * अवधारणात्मक * सार्वजनिक नहीं है ...)। –
"किसी दिए गए मॉड्यूल के लिए सभी कक्षाओं को बिल्कुल उसी पैकेज में डंप करें - अनावश्यक" - सही है, लेकिन मैंने पैकेज में 20-30 कक्षाओं जैसे गैर-मामूली मामलों में भी इस दृष्टिकोण का उपयोग किया है। कुछ भी बड़ा, ज़ाहिर है, refactoring की जरूरत है। –
क्या आप अपनी स्रोत फ़ाइलों को एक निर्देशिका पदानुक्रम में व्यवस्थित नहीं कर सके, और फिर निर्माण के दौरान, उन्हें संकलित करने से पहले सभी निर्देशिका/पैकेज में डंप करें? इससे आपको संगठनात्मक संरचना और पैकेज निजी लाभ का लाभ मिलेगा, सही? – jrahhali