نقشه برداری نام کلاس
از آنجایی که J2ObjC فقط کلاس های جاوا غیر UI را ترجمه می کند، یک برنامه iOS باید مستقیماً با کلاس های ترجمه شده کار کند. کلاس های ترجمه شده کلاس های عادی Objective-C با ریشه NSObject هستند، اما به درک نحوه تبدیل کلاس، متد، پارامتر و نام فایل هدر کمک می کند.
جاوا از بستهها برای تعریف فضاهای نام استفاده میکند، در حالی که Objective-C بستهها را ندارد و در عوض یک قرارداد برای قرار دادن یک پیشوند مشترک در مقابل کلاسهای مرتبط (مانند NSObject و NSString) دارد. برای حفظ فضاهای نام جاوا، نام بسته ها به یک پیشوند شتر نگاشت می شوند. به عنوان مثال، java.util.List
به طور پیش فرض به JavaUtilList
نگاشت می شود. این پیشوند پیش فرض را می توان به صراحت با استفاده از گزینه های پیشوند بسته j2objc تنظیم کرد.
نام پارامترها
جاوا متدهای بارگذاری شده را بر اساس انواع آرگومانشان متمایز می کند، در حالی که Objective-C از نام آرگومان ها استفاده می کند. بنابراین J2ObjC نام های آرگومان را از انواع آنها ایجاد می کند. به عنوان مثال، در اینجا نحوه درج یک شی در ابتدای یک ArrayList
و نحوه اضافه شدن آن لیست به لیست دیگری آمده است:
[someList addWithInt:0 withId:object];
[otherList addAllWithJavaUtilCollection:somelist];
نام هر آرگومان از "with" به اضافه نوع آن تشکیل شده است. این کمی زشت است، اما تضمین می کند که همان روشی که در جاوا وجود داشت همیشه در Objective-C فراخوانی می شود.
نام سرصفحه ها
با این حال، فایلهای سرصفحه، نامشان نگاشت نشده است، اما در عوض، مسیر فایل منبع جاوا به جای «.java» با «.h» ختم میشود. این کار ابزارهای پشتیبانی مانند Xcode و Make را بسیار آسانتر میکند، اما در ابتدا میتواند کمی گیجکننده باشد، زیرا:
#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];