การแมปชื่อ
Java ใช้แพ็กเกจเพื่อกําหนดเนมสเปซที่ไม่เป็นทางการ ขณะที่ Objective C++ มีเนมสเปซ C++ แต่ Objective C ไม่ได้ใช้ เพื่อรักษาความไม่ซ้ํากันของชื่อเมื่อใช้คลาสจากแพ็กเกจหลายรายการ
J2ObjC เพิ่มแพ็กเกจอูฐที่คํานึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในชื่อประเภท เช่น java.util.Map
เปลี่ยนชื่อเป็น JavaUtilMap
ขออภัย ชื่อแพ็กเกจที่มาจากอูฐอาจลดความสามารถในการอ่านโค้ดที่สร้างขึ้นได้ โดยเฉพาะอย่างยิ่งกับชื่อแพ็กเกจที่ยาว ตัวอย่างเช่น คําอธิบายประกอบรุ่นเบต้าของ Google Guava อยู่ในแพ็กเกจ com.google.common.annotations
และ ComGoogleCommonAnnotationsBeta
อ่านได้ยากกว่า Beta
การระบุคํานําหน้าแพ็กเกจ
รูปแบบ Objective-C สําหรับการกําหนดเนมสเปซที่ไม่เป็นทางการคือการใช้คํานําหน้าที่ใช้ร่วมกัน ซึ่งมักจะเป็นตัวอักษรพิมพ์ใหญ่ 2 ตัว เฟรมเวิร์กพื้นฐานของ iOS ใช้ "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'
อักขระไวลด์การ์ดเดียวที่รองรับคือ "*" ซึ่งจะจับคู่กับที่ Shell บรรทัดคําสั่งทํางานกับชื่อไฟล์
การระบุคํานําหน้าแพ็กเกจหลายรายการ
คุณใช้ไฟล์พร็อพเพอร์ตี้กับอาร์กิวเมนต์ "--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.properies ในแพ็กเกจทรัพยากรที่มีคํานําหน้าสําหรับการแปล Class.forName(javaName)
จะค้นหาคลาสที่แมป
หากต้องการเพิ่ม prefixes.properities ข้างต้นลงในแอป iOS ใน Xcode ให้เปิดแท็บ "สร้างเฟส" ของเป้าหมายบิลด์ ขยายส่วน "คัดลอกกลุ่มทรัพยากร" แล้วเพิ่มไฟล์ prefixes.properies ลงในรายการนั้น ทรัพยากร Java มีข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่แนวคิดทรัพยากรของ Java จับคู่กับทรัพยากร iOS