मैं जावा 9 के साथ प्रयोग कर रहा हूँ और देख निम्न परिदृश्यों पर:जावा 9 में, कुछ मामलों में पैकेज टकराव का थोड़ा अलग व्यवहार क्यों किया जाता है?
प्रयोग 1
- मॉड्यूल एक
- मॉड्यूल बी
- दोनों com.foo नाम के एक गैर खाली पैकेज की घोषणा लेकिन इसे निर्यात न करें।
java.lang.RuntimeException: मॉड्यूल बी और मॉड्यूल दोनों में पैकेज com.foo
- दोनों एक 3 मॉड्यूल सी
'सी' से एक मुख्य रनिंग के लिए आवश्यक हैं एक रनटाइम त्रुटि देता है एक
प्रयोग 2
से पहले लेकिन इस बार दोनों निर्यात com.foo के रूप में एक ही।
सी से मुख्य क्रियान्वित करने के परिणाम:
java.lang.module.ResolutionException: मॉड्यूल बी और एक निर्यात पैकेज com.foo मॉड्यूल सी
प्रयोग 3
ही 2 के रूप में, लेकिन इस बार मैंने मॉड्यूल सी में पैकेज com.foo घोषित किया।
अब मुझे संकलन त्रुटि मिलती है: त्रुटि: (4, 1) जावा: मॉड्यूल सी ए और बी
संकलन के दौरान पहले दो मामलों को पकड़ा नहीं गया है, तो पैकेज com.foo को पढ़ता है। क्या रनटाइम गुण हैं जो प्रोग्राम को निष्पादित करने से पहले उस पूर्ववर्ती संकल्प से अवगत नहीं हैं?
इसके अलावा, जहां तक त्रुटि संदेश संबंधित हैं: प्रयोग 2 में त्रुटि संदेश में त्रुटि संदेश में किस तरह से त्रुटि संदेश है। ऐसा नहीं है कि यदि मॉड्यूल में से कोई एक इसे निर्यात नहीं करता है तो अंतिम परिणाम कोई अलग होगा। दूसरे शब्दों में, विभिन्न त्रुटि संदेशों के उत्पादन के पीछे क्या विचार था?
* "पहले दो मामले संकलन के दौरान क्यों नहीं पकड़े गए हैं?" * क्योंकि संकलक उस * विस्तारित * विश्लेषण के माध्यम से नहीं गए जो सीधे मॉड्यूल सी द्वारा उपयोग नहीं किए जा रहे हैं। यह क्यों होगा? केवल # 3 संकलक को 'com.foo' पैकेज को देखने का कारण बनता है। अब, अगर आपके # 2 ने 'com.foo' से कक्षा को 'आयात' करने का प्रयास किया था, तो शायद यह संकलन विफल हो जाएगा, क्योंकि संकलक को यह पता लगाना होगा कि कौन से मॉड्यूल से इसे प्राप्त किया जाए। – Andreas
@ एंड्रियास, इसके बारे में पता नहीं - सभी मॉड्यूल में सभी पैकेजों को निर्यात करने के बाद। मैं व्यावहारिक रूप से इसे चांदी की प्लेट पर कंपाइलर को दे रहा हूं :)। यहां तक कि यदि यह एक लंबी श्रृंखला थी - कीवर्ड पर विचार करना - यह एक कम्प्यूटेशनल जटिल समस्या नहीं है। वे पहले से ही पठनीयता ग्राफ बना रहे हैं, इसलिए सब कुछ बाहर है। – Vitaliy
तो, उन्होंने अतिरिक्त (वैकल्पिक) काम नहीं किया। यदि आपको लगता है कि यह "महत्वपूर्ण क्यों है" पूछने के बजाय, यह महत्वपूर्ण है, तो मैं सुझाव दूंगा कि आप एक वृद्धि अनुरोध दर्ज करें। – Andreas