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

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

เนื่องจาก 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];