การอ่านแหล่งที่มาที่สร้าง

การแมปชื่อชั้นเรียน

เนื่องจาก 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 และทําสิ่งต่างๆ ได้ง่ายขึ้นมาก แต่อาจทําให้สับสนเล็กน้อยในตอนแรกได้ เนื่องจาก

#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];