איך מציינים תחיליות לשמות של חבילות.

מיפוי שמות

Java משתמשת בחבילות כדי להגדיר מרחבי שמות באופן לא רשמי; ואילו ב-Objective 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" יהיה בשימוש. A יש צורך בהצהרת קידומת לכל חבילה.

הגדרת קידומת יחידה למספר חבילות

ספריות קטנות יותר בדרך כלל כוללות שמות של מחלקות Java שאינם מתנגשים, ולכן הן יכולות לשתף קידומת אחת עם מפרט חבילה עם תווים כלליים לחיפוש. לדוגמה, לכל החבילות Joda-Time יכולות להיות אותה קידומת JT באמצעות --prefix 'org.joda.time.*=JT'. התו הכללי היחיד שנתמך הוא '*', שתואם לאותה הדרך מעטפת שורת הפקודה עם שמות קבצים.

הגדרה של קידומות מרובות של חבילות

כדי לציין הגדרות קידומות פשוטות יותר, אפשר להשתמש בקובץ מאפיינים עם הפונקציה '--prefixes file' ארגומנט:

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, פותחים את שלבי ה-Build של יעד ה-build , מרחיבים את הקטע Copy Bundle Resources ומוסיפים את הקובץ prefixes.properties לרשימה הזו. משאבי Java כוללים מידע נוסף על האופן שבו מושגים של משאבי Java ממופים ל-iOS המשאבים.