2017-10-03 16 views
7

क्या के बीच का अंतर और मॉड्यूल घोषणा में स्थिर मॉड्यूल बयानों की आवश्यकता की आवश्यकता है?क्या अंतर के बीच की आवश्यकता है और मॉड्यूल घोषणा में स्थिर आवश्यकता है

उदाहरण के लिए:

module bar { 
    requires java.compiler; 
    requires static java.base; 
} 
+3

संभावित डुप्लिकेट [क्या जावा 9 मॉड्यूल सिस्टम वैकल्पिक निर्भरता का समर्थन करता है?] (Https://stackoverflow.com/questions/39900460/does-the-java-9- मॉड्यूल- सिस्टम-support-optional- निर्भरता) – ZhekaKozlov

+1

@ZhekaKozlov हालांकि मैं डुप्लिकेट वोट का समर्थन करता हूं। लेकिन यह सुनिश्चित नहीं है कि लिंक किए गए पोस्ट में दोनों के बीच * अंतर * है। वैसे भी, मुझे यह भी विश्वास है कि इस प्रश्न के पीछे प्राथमिक उद्देश्य 'स्थिर' निर्देशक पर 'स्थिर' संशोधक के बारे में जानना हो सकता है। – nullpointer

+1

मैं इसे डुप्लिकेट नहीं मानता। जबकि दोनों प्रश्न एक ही विषय से निपटते हैं, उनके पास बहुत अलग कोण हैं। यहां यह प्रश्न सिंटैक्स की खोज करने वाले लोगों द्वारा पाया जाएगा, दूसरा व्यक्ति निर्भरता वैकल्पिक बनाने की आवश्यकता वाले लोगों द्वारा किया जाएगा। – Nicolai

उत्तर

7

requires खंड व्यक्त करता है कि संकलित और रन टाइम पर आवश्यक मॉड्यूल की आवश्यकता है। नतीजतन, जब मॉड्यूल सिस्टम module resolution के दौरान इस तरह के एक खंड का सामना करता है (जिस चरण में मॉड्यूल डिस्क्रिप्टर संसाधित होते हैं और निर्भरता हल हो जाती है) यह देखने योग्य मॉड्यूल के ब्रह्मांड (जेडीके में मॉड्यूल और मॉड्यूल पथ पर) की खोज करता है और अगर कोई त्रुटि फेंकता है यह मॉड्यूल नहीं मिला है।

requires static खंड a dependency that is optional at run time व्यक्त करता है। इसका मतलब है संकलन समय पर मॉड्यूल सिस्टम बिल्कुल वर्णित जैसा व्यवहार करता है।

दूसरी ओर, रन समय पर, यह अधिकतर requires static खंडों को अनदेखा करता है। यदि यह एक से मुकाबला करता है, तो यह इसे हल नहीं करता है। इसका मतलब है, अगर एक अवलोकन मॉड्यूल केवल requires static के साथ संदर्भित है, तो यह इसे मॉड्यूल ग्राफ में नहीं बनाता है! यह पहली बार थोड़ा आश्चर्यजनक हो सकता है। यदि, दूसरी तरफ, मॉड्यूल इसे किसी अन्य तरीके से ग्राफ़ में बनाता है (added manually with --add-modules द्वारा आवश्यक, service binding द्वारा खींचा गया), सभी मॉड्यूल जिन पर वैकल्पिक निर्भरता है, वे read कर सकते हैं।

3

दोनों के बीच प्राथमिक अंतर यह है कि

requires static foo.module; 

के मामले में निर्भरता स्थिर चरण में अनिवार्य है, संकलन, दौरान लेकिन में वैकल्पिक है है गतिशील चरण, दूसरी तरफ निष्पादन के दौरान

requires bar.module; 

यह घोषणा करने के लिए जोड़ा गया है कि मॉड्यूल कुछ अन्य मॉड्यूल पर, नाम से, दोनों संकलित समय और रन टाइम पर निर्भर करता है।

संबंधित मुद्दे