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

מיפוי שמות

ב-Java נעשה שימוש בחבילות כדי להגדיר מרחבי שמות באופן לא פורמלי, ואילו ב-C+ C יש אובייקטים של מרחבי שמות ל-C++, אבל המטרה של C++ לא היא. כדי לשמור על הייחודיות של שם בזמן שימוש בכיתות מכמה חבילות, J2ObjC מצורפת לגרסה עם שם של גמל שצורף באותיות גדולות. לדוגמה, השם של java.util.Map שונה ל-JavaUtilMap.

למרבה הצער, שמות של חבילות רישיות בגמל יכולים לצמצם את הקוד של הקוד שנוצר, במיוחד עם שמות ארוכים של חבילות. לדוגמה, הערה של גרסת הבטא של Google Guava נמצאת בחבילה של com.google.common.annotations, וקשה יותר לקרוא את ComGoogleCommonAnnotationsBeta מאשר את Beta.

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

השיטה המקובלת להגדרת מרחבי שמות לא רשמיים היא להשתמש בקידומת משותפת, לרוב שתי אותיות רישיות. למשל, ב-iOS Foundation Framework נעשה שימוש ב-NS (מ-NeXTStep). כדי לפשט את שם הבטא של Google Guava, קידומת כגון "GG" תשפר את נוחות הקריאה על ידי התייחסות אל Beta בתור GGBeta.

J2ObjC תומך במפתחים המפרטים את הקידומות שלהם למיפוי לשמות חבילות. הפעולה הזו מתבצעת בשורת הפקודה באמצעות --prefix package=prefix. כדי לקצר את כל שמות הכיתות בחבילה של Beta, ייעשה שימוש ב-"--prefix com.google.common.annotations=GG". יש צורך בהצהרת קידומת נפרדת לכל חבילה.

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

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