मैं follwing जावा 9 मॉड्यूल है:आंतरिक प्रकारों को लीक करने वाले सार्वजनिक एपीआई का संकलन क्यों विफल नहीं होता है?
module com.example.a {
exports com.example.a;
}
एक निर्यात प्रकार के साथ:
public class Api {
public static void foo(ImplDetail args) {}
}
और एक गैर-निर्यात के प्रकार:
package com.example.b.internal;
public class ImplDetail {}
निर्यात प्रकार गैर का उपयोग करता है एक सार्वजनिक विधि में एक विधि पैरामीटर प्रकार के रूप में निर्यात प्रकार। मुझे लगता है कि संकलक इस तरह के असंगत वर्ग कॉन्फ़िगरेशन को अस्वीकार कर देगा, क्योंकि अन्य मॉड्यूल में क्लाइंट वास्तव में foo()
विधि का आह्वान नहीं कर सके क्योंकि वे पैरामीटर प्रकार को तुरंत चालू नहीं कर सकते हैं।
मेरे आश्चर्य के लिए, यह मॉड्यूल जैवैक द्वारा सफलतापूर्वक संकलित किया गया है। मैं null
पास करने का विशेष मामला देख सकता हूं, फिर भी मैं ऐसी एपीआई परिभाषा को विकृत मानता हूं और सोचता हूं कि इसे समर्थित नहीं किया जाना चाहिए, आदर्श रूप से संकलक द्वारा लागू किया गया है।
ऐसे मामले को अस्वीकार करने का तर्क क्या है?
आपके विस्तृत उत्तर के लिए धन्यवाद, स्टुअर्ट! एक गैर-निर्यात किए गए प्रकार से निर्यात किए गए प्रकार को प्राप्त करना मेरे लिए उतना ही असंगत लगता है, इसलिए मैंने कहा होगा कि अकेले को एक संकलन त्रुटि ('उप' के लिए) वारंट करना चाहिए। लेकिन शायद एक ही समस्या होगी जो आप कई संकलन चरणों के साथ वर्णन करते हैं। – Gunnar
@ गुन्नर थोड़ी देर के लिए इस पर विचार करने के बाद, मुझे एहसास हुआ कि यह एक निजी वर्ग का उप-वर्ग है जो सार्वजनिक वर्ग के लिए उचित (यदि असामान्य) है।जेडीके में, उदाहरण के लिए, जावा.लांग में, 'स्ट्रिंगबफर' और 'स्ट्रिंगबिल्डर' एक निजी वर्ग 'सारस्ट्रिंगबिल्डर' के सार्वजनिक उप-वर्ग हैं। पदानुक्रम एसबी <: एएसबी <: एक इंटीरियर निजी वर्ग के साथ वस्तु है, लेकिन यह कार्यान्वयन साझा करने के लिए किया गया है, यह थोड़ा अजीब है। ध्यान दें कि एएसबी को एपीआई में एक प्रकार के रूप में उजागर नहीं किया गया है। –
फॉलो-अप के लिए धन्यवाद। व्यक्तिगत रूप से, मुझे इस तरह के डिजाइन अजीब लगता है। एक प्रकार का उपयोगकर्ता एक प्रकार के आईएमओ के पूर्ण पदानुक्रम को देखने में सक्षम होना चाहिए। यदि यह कार्यान्वयन साझा करने के बारे में है, तो यह प्रतिनिधिमंडल के माध्यम से एक निजी साझा कक्षा में किया जा सकता है। – Gunnar