การแมปชื่อชั้นเรียน
เนื่องจาก J2ObjC แปลเฉพาะคลาส Java ที่ไม่ใช่ UI แอปพลิเคชัน iOS จึงต้องทำงานกับฟังก์ชัน ชั้นเรียนที่มีการแปล คลาสที่แปลแล้วเป็นคลาส Objective-C รูทของ NSObject ตามปกติ แต่ ช่วยให้เข้าใจว่าระบบแปลงชื่อไฟล์คลาส เมธอด พารามิเตอร์ และส่วนหัวอย่างไร
Java ใช้แพ็กเกจในการกำหนดเนมสเปซ ขณะที่ Objective-C ไม่มีแพ็กเกจแต่มีแพ็กเกจ
รูปแบบการวางคำนำหน้าที่ใช้ร่วมกันไว้หน้าคลาสที่เกี่ยวข้อง (เช่น NSObject และ NSString) ถึง
เก็บรักษาเนมสเปซของ Java ชื่อแพ็กเกจจะแมปกับคำนำหน้าที่มีตัวหุ้มอูฐ ตัวอย่างเช่น
java.util.List
จะแมปกับ JavaUtilList
โดยค่าเริ่มต้น คุณสามารถตั้งค่าคำนำหน้าเริ่มต้นนี้ได้อย่างชัดเจน
โดยใช้ตัวเลือกคำนำหน้าแพ็กเกจของ j2objc
ชื่อพารามิเตอร์
Java แยกความแตกต่างของเมธอดที่ใช้มากเกินไปตามประเภทอาร์กิวเมนต์ ขณะที่ Objective-C ใช้อาร์กิวเมนต์
ดังนั้น J2ObjC จะสร้างชื่ออาร์กิวเมนต์จากประเภท ตัวอย่างเช่น นี่คือลักษณะ
ออบเจ็กต์ถูกแทรกลงในจุดเริ่มต้นของ ArrayList
และวิธีการเพิ่มรายการดังกล่าวลงในรายการ
รายการ:
[someList addWithInt:0 withId:object];
[otherList addAllWithJavaUtilCollection:somelist];
ชื่ออาร์กิวเมนต์แต่ละรายการประกอบด้วย "with" รวมทั้งประเภท แม้จะดูไม่น่าพอใจนัก แต่ก็ต้องมั่นใจว่า มีการเรียกใช้ใน Objective-C เสมอ เช่นเดียวกับใน Java
ชื่อส่วนหัว
ไฟล์ส่วนหัวไม่ได้แมปชื่อ แต่มีเส้นทางไฟล์ที่มา Java แทน ที่ลงท้ายด้วย ".h" แทนที่จะเป็น ".java" ทำให้เครื่องมือสนับสนุนอย่าง Xcode และ Google ง่ายขึ้นมาก แต่ก็อาจทำให้สับสนได้เล็กน้อยในช่วงแรก
#import "java/util/Date.h"
ประกาศคลาส JavaUtilDate
ไม่ใช่ Date
การใช้ชั้นเรียนที่แปลแล้ว
นอกเหนือจากชื่อคี่ (ซึ่งสามารถทำให้เข้าใจง่ายขึ้นด้วยคำนำหน้าแพ็กเกจ) ชั้นเรียนที่มีการแปลจะถูกใช้เช่นเดียวกับชั้นเรียน Objective-C อื่นๆ:
#import "java/util/BitSet.h"
...
JavaUtilBitSet *bitset = [[JavaUtilBitSet alloc] init];
[bitset setWithInt:10 withBOOL:YES];
BOOL b = [bitset getWithInt:10];