การแมปชื่อ
Java ใช้แพ็กเกจเพื่อกำหนดเนมสเปซอย่างไม่เป็นทางการ ขณะที่วัตถุประสงค์ C++ มีเนมสเปซ C++
วัตถุประสงค์ C ไม่ได้ทำเช่นนั้น หากต้องการรักษาความเป็นเอกลักษณ์ของชื่อเมื่อใช้คลาสจากแพ็กเกจหลายรายการ
J2ObjC ใส่แพ็กเกจเวอร์ชันหุ้มอูฐไว้หน้าแพ็กเกจในชื่อประเภท ตัวอย่างเช่น
java.util.Map
เปลี่ยนชื่อเป็น JavaUtilMap
แล้ว
อย่างไรก็ตาม ชื่อแพ็กเกจลวดลายอูฐอาจลดความอ่านง่ายของโค้ดที่สร้างขึ้น โดยเฉพาะอย่างยิ่ง
ที่มีชื่อแพ็กเกจยาวๆ ตัวอย่างเช่น Google Guava
คำอธิบายประกอบเบต้า
อยู่ในแพ็กเกจ com.google.common.annotations
และ ComGoogleCommonAnnotationsBeta
ยากกว่า
อ่านมากกว่า Beta
การกำหนดคำนำหน้าแพ็กเกจ
ระเบียบแบบ Objective-C สำหรับการกำหนดเนมสเปซที่ไม่เป็นทางการคือการใช้คำนำหน้าร่วมกัน โดยทั่วไปมีสอง
ตัวพิมพ์ใหญ่ iOS Foundation Framework ใช้ "NS" (ตั้งแต่
NeXTStep) เป็นต้น เพื่อให้รุ่นเบต้าของ Google Guava ง่ายขึ้น
ชื่อ คำนำหน้า เช่น "GG" จะช่วยเพิ่มความสะดวกในการอ่านโดยอ้างอิง Beta
เป็น GGBeta
J2ObjC รองรับนักพัฒนาซอฟต์แวร์ที่ระบุคำนำหน้าของตนเองเพื่อแมปกับชื่อแพ็กเกจ ซึ่งทำบน
บรรทัดคำสั่งโดยใช้ --prefix package=prefix
หากต้องการย่อชื่อชั้นเรียนทั้งหมดใน
แพ็กเกจของ Beta
"--prefix com.google.common.annotations=GG
" ที่ควรจะใช้ แยก
ต้องมีการประกาศคำนำหน้าสำหรับแต่ละแพ็กเกจ
การกำหนดคำนำหน้าเดียวสำหรับแพ็กเกจหลายแพ็กเกจ
ไลบรารีขนาดเล็กมักมีชื่อคลาส Java ที่ไม่ขัดแย้งกัน จึงสามารถแชร์คำนำหน้าเดียวกันได้
ที่มีข้อกำหนดแพ็กเกจ
ที่ใช้ไวลด์การ์ด เช่น แพ็กเกจ Joda-Time ทั้งหมดจะใช้คำนำหน้า JT เดียวกันได้โดยใช้ --prefix
'org.joda.time.*=JT'
อักขระไวลด์การ์ดที่รองรับคือ "*" เท่านั้น ซึ่งจะจับคู่กับ
เชลล์บรรทัดคำสั่งใช้กับชื่อไฟล์
การกำหนดคำนำหน้าแพ็กเกจหลายรายการ
เพื่อให้ระบุนิยามคำนำหน้าหลายรายการได้ง่ายขึ้น สามารถใช้ไฟล์พร็อพเพอร์ตี้ร่วมกับ
"--prefixes
ไฟล์" อาร์กิวเมนต์:
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)
จะค้นหาคลาสที่แมปไว้
หากต้องการเพิ่ม prefixes.properties ข้างต้นลงในแอป iOS ใน Xcode ให้เปิดเฟสบิลด์ของเป้าหมายบิลด์ ให้ขยายส่วนคัดลอกทรัพยากรของกลุ่ม และเพิ่มไฟล์ prefixes.properties ลงในรายการ ทรัพยากร Java มีรายละเอียดเพิ่มเติมเกี่ยวกับวิธีแมปแนวคิดทรัพยากรของ Java ไปยัง iOS ที่ไม่ซับซ้อน