2017-05-18 26 views
14

जावा 9 (जेडीके -9 + 170) नए मॉड्यूल सिस्टम के कारण जावा के सभी पिछले संस्करणों के विपरीत जेडीके से सभी कक्षाओं को देखने के लिए डिफ़ॉल्ट रूप से अनुमति नहीं देता है।जावा 9 में --add-export और --add-opens के बीच क्या अंतर है?

java -jar josm.jar --add-exports java.base/sun.security.util=ALL-UNNAMED --add-exports java.base/sun.security.x509=ALL-UNNAMED

यह अच्छी तरह से JEP 261 में समझाया गया है:

इस समाधान करने के लिए, java कमांड लाइन एक नया तर्क --add-exports जो इस प्रकार कैप्सूलीकरण तोड़ने के लिए अनुमति देता है प्रदान करता है।

मैंने उसी वाक्यविन्यास का उपयोग कर --add-opens के समान विकल्प के बारे में पढ़ा है, लेकिन जेईपी 261 को अभी तक इसका वर्णन करने के लिए अपडेट नहीं किया गया है (अंतिम अपडेट: 2017/03/08 13:58)।

इन दो विकल्पों के बीच क्या अंतर है?

संपादित: JEP 261 2017/09/22 पर अद्यतन किया गया है यह समझाने के लिए।

उत्तर

20
  • --add-exports पैकेज के साथ निर्यात किया जाता है, जिसका अर्थ है कि सभी सार्वजनिक प्रकार और सदस्य संकलित और रन टाइम पर पहुंच योग्य हैं।
  • --add-opens के साथ पैकेज खोला गया है, जिसका अर्थ है कि सभी प्रकार और सदस्य (न केवल सार्वजनिक वाले!) इसमें रन टाइम पर पहुंच योग्य हैं।

तो रन टाइम पर मुख्य अंतर यह है कि --add-opens की अनुमति देता है "गहरी प्रतिबिंब", गैर सरकारी सदस्यों की पहुँच अर्थ है। आप आम तौर पर setAccessible(true) पर कॉल करने वाले कोड को प्रतिबिंबित करके इस तरह की पहुंच की पहचान कर सकते हैं।

+2

रनटाइम '-ड-ओपन' पर यह कहते हुए लायक है कि '-ड-एक्सपोर्ट' – ZhekaKozlov

+2

दो गोलियां बताती हैं कि '-add-opens' द्वारा सुलभ किए गए प्रकार/सदस्य '- के सुपरसैट हैं - ऐड-एक्सपोर्ट्स ', इसलिए मुझे नहीं लगता कि एक दूसरे को implicates बताता है कि विवरण में कोई मूल्य जोड़ता है। – Nicolai

+0

अब यह जेईपी 261 में समझाया गया है क्योंकि मार्क ने आज पेज को अपडेट किया है: http://openjdk.java.net/jeps/261 – vip

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