วิธีระบุคำนำหน้าสำหรับชื่อแพ็กเกจ

การแมปชื่อ

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 ที่ไม่ซับซ้อน