מיפוי שמות הכיתות
מכיוון ש-J2ObjC מתרגמת רק מחלקות Java שלא מבוססות על ממשק המשתמש, אפליקציה ל-iOS צריכה לפעול ישירות עם של הכיתות המתורגמות. כיתות מתורגמות הן מחלקות רגילות של NSObject-rooted Objective-C, אבל עוזר להבין איך מתבצעת המרה של שמות קבצים של מחלקות, שיטות, פרמטרים וכותרות.
ב-Java משתמשים בחבילות כדי להגדיר מרחבי שמות, ואילו ב-Objective-C אין חבילות אלא
המוסכמה של הוספת קידומת משותפת לפני מחלקות קשורות (כמו NSObject ו-NSString). שפת תרגום
לשמר מרחבי שמות של Java, שמות חבילות ממופים לקידומת באותיות גמל. לדוגמה,
java.util.List
ממופה כברירת מחדל ל-JavaUtilList
. אפשר להגדיר במפורש את קידומת ברירת המחדל הזו
באמצעות אפשרויות קידומת לחבילה של j2objc.
שמות הפרמטרים
Java עושה הבחנה בין שיטות עומס יתר לפי סוגי הארגומנטים, ואילו אובייקט ג' משתמש בארגומנט
שמות. לכן J2ObjC יוצרת שמות של ארגומנטים מהסוגים שלהם. לדוגמה, כך
מוכנס בתחילת ArrayList
, ואיך הרשימה מתווספת לאחר מכן
list:
[someList addWithInt:0 withId:object];
[otherList addAllWithJavaUtilCollection:somelist];
כל שם של ארגומנט מורכב מ-'with' ועוד סוג שלו. זה קצת מכוער, אבל זה יבטיח תמיד מופעלת ב-Objective-C כפי שהיה ב-Java.
שמות של כותרות
עם זאת, השמות של קובצי הכותרות לא ממופים, אלא כוללים את נתיב הקובץ של Java עם הסיומת ' .h' במקום ' .Java'. כך קל יותר להשתמש בכלים כמו Xcode ו-Maker, אבל יכול להיות קצת מבלבל בהתחלה, כי:
#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];