पैकेज के नामों के लिए प्रीफ़िक्स बताने का तरीका.

नाम की मैपिंग

Java, नेमस्पेस को अनौपचारिक तौर पर तय करने के लिए पैकेज का इस्तेमाल करता है; वहीं, Objective C++ में C++ नेमस्पेस हैं, Objective-C इस्तेमाल नहीं करता. एक से ज़्यादा पैकेज की क्लास का इस्तेमाल करते समय, नाम को यूनीक बनाए रखने के लिए, J2ObjC टाइप के नाम के आगे पैकेज का कैमल-केस वर्शन जोड़ता है. उदाहरण के लिए, java.util.Map का नाम बदलकर JavaUtilMap कर दिया गया है.

हमें खेद है कि ऊंट के केस वाले पैकेज के नाम, जनरेट किए गए कोड को पढ़ने में कठिनाई को कम कर सकते हैं, खास तौर पर लंबे पैकेज नाम के साथ. उदाहरण के लिए, Google Guava's बीटा वर्शन के बारे में जानकारी com.google.common.annotations पैकेज में है और ComGoogleCommonAnnotationsBeta से ज़्यादा मुश्किल है Beta से पढ़ें.

पैकेज के लिए प्रीफ़िक्स तय करना

अनौपचारिक नेमस्पेस तय करने के लिए, Objective-C कन्वेंशन में शेयर किए गए प्रीफ़िक्स का इस्तेमाल किया जाता है. आम तौर पर, ये दो प्रीफ़िक्स होते हैं अंग्रेज़ी वर्णमाला के बड़े अक्षर दिखाएं. iOS फ़ाउंडेशन फ़्रेमवर्क "NS" का इस्तेमाल करता है (भेजने वाला उदाहरण के लिए, NeXTStep के लिए कई वैल्यू होती हैं. Google Guava के बीटा वर्शन को आसान बनाने के लिए नाम, प्रीफ़िक्स जैसे "GG" Beta को GGBeta के तौर पर रेफ़र करके, कॉन्टेंट को आसानी से पढ़ा जा सकता है.

J2ObjC ऐसे डेवलपर की मदद करता है जो पैकेज के नाम से मैप करने के लिए, खुद के प्रीफ़िक्स बताते हैं. यह इस पर किया जाता है --prefix package=prefix का इस्तेमाल करके कमांड लाइन जोड़ सकते हैं. सभी क्लास के नाम को छोटा करने के लिए Beta का पैकेज, "--prefix com.google.common.annotations=GG" इस्तेमाल किया जाएगा. हर पैकेज के लिए, अलग से प्रीफ़िक्स एलान करना ज़रूरी है.

एक से ज़्यादा पैकेज के लिए एक प्रीफ़िक्स तय करना

छोटी लाइब्रेरी में अक्सर Java क्लास के नाम होते हैं जिनमें कॉन्फ़्लिक्ट नहीं होता. इसलिए, एक प्रीफ़िक्स शेयर किया जा सकता है जिसमें वाइल्डकार्ड वाले पैकेज की खास बातों को ध्यान में रखा जाता है. उदाहरण के लिए, --prefix 'org.joda.time.*=JT' का इस्तेमाल करके, सभी Joda-Time पैकेज एक ही JT प्रीफ़िक्स शेयर कर सकते हैं. सिर्फ़ '*' वाइल्डकार्ड वर्ण इस्तेमाल किया जा सकता है, जो कमांड-लाइन शेल फ़ाइल नाम का इस्तेमाल करता है.

एक से ज़्यादा पैकेज प्रीफ़िक्स तय करना

प्रीफ़िक्स की कई परिभाषाओं को आसानी से बताने के लिए, "--prefixes file" आर्ग्युमेंट के साथ प्रॉपर्टी फ़ाइल का इस्तेमाल किया जा सकता है:

cat prefixes.properties
com.google.common.annotations: GG
com.google.common.base: GG

# While GG can be used for all packages, let's mix it up.
com.google.common.collect: GC
com.google.common.io: GIO        # A prefix can be more than two characters,
com.google.common.net: GuavaNet  # a lot more!
...
j2objc --prefixes prefixes.properties <args>

रनटाइम पर प्रीफ़िक्स की गई क्लास

इस्तेमाल किए जा चुके ऐप्लिकेशन में प्रीफ़िक्स वाली क्लास हैं. इसलिए, उन्हें मूल Java का इस्तेमाल करके खोजा नहीं जा सकता क्लास का नाम डिफ़ॉल्ट रूप से. हालांकि, अगर ऐप्लिकेशन के संसाधन में prefixes.properties नाम की कोई फ़ाइल है अनुवाद के लिए इस्तेमाल किए गए प्रीफ़िक्स के साथ बंडल जोड़ने पर, Class.forName(javaName) मैप की गई क्लास ढूंढेगा.

Xcode में, किसी iOS ऐप्लिकेशन में ऊपर दिए गए prefixes.properties जोड़ने के लिए, बिल्ड टारगेट के बिल्ड के चरण खोलें टैब पर जाएं, इसके 'बंडल संसाधन कॉपी करें' सेक्शन को बड़ा करें और उस सूची में prefixes.properties फ़ाइल जोड़ें. Java रिसॉर्स में इस बारे में ज़्यादा जानकारी दी गई है कि Java रिसॉर्स के कॉन्सेप्ट, iOS रिसॉर्स के साथ कैसे मैप होते हैं.