Pemetaan nama kelas
Karena J2ObjC hanya menerjemahkan kelas Java non-UI, aplikasi iOS harus langsung bekerja dengan class yang telah diterjemahkan. Kelas terjemahan adalah kelas Objective-C yang di-root NSObject biasa, tetapi membantu memahami bagaimana nama file class, metode, parameter, dan header dikonversi.
Java menggunakan paket untuk menentukan namespace, sedangkan Objective-C tidak memiliki paket dan sebagai gantinya
mengenai penempatan awalan bersama di depan class terkait (seperti NSObject dan NSString). Kepada
mempertahankan namespace Java, nama paket dipetakan ke awalan camel-case. Misalnya,
java.util.List
dipetakan secara default ke JavaUtilList
. Awalan default ini dapat disetel secara eksplisit
menggunakan opsi awalan paket j2objc.
Nama parameter
Java membedakan metode yang kelebihan beban berdasarkan jenis argumennya, sementara Objective-C menggunakan argumen
nama. Oleh karena itu J2ObjC membuat nama argumen dari tipenya. Sebagai contoh, berikut ini adalah cara
objek dimasukkan ke dalam awal ArrayList
, lalu cara daftar tersebut ditambahkan ke elemen lain
daftar:
[someList addWithInt:0 withId:object];
[otherList addAllWithJavaUtilCollection:somelist];
Setiap nama argumen terdiri dari "with" beserta jenisnya. Agak jelek, tapi memastikan bahwa hal yang sama selalu dipanggil di Objective-C seperti halnya dengan Java.
Nama header
Namun, file header tidak memiliki namanya yang dipetakan, melainkan memiliki jalur file sumber Java diakhiri dengan ".h" bukan ".java". Hal ini membuat alat pendukung seperti Xcode dan Make lebih mudah, tetapi pada awalnya bisa sedikit membingungkan, karena:
#import "java/util/Date.h"
mendeklarasikan class JavaUtilDate
, bukan Date
.
Menggunakan kelas yang diterjemahkan
Selain nama yang ganjil (yang dapat disederhanakan dengan awalan paket), yang diterjemahkan digunakan seperti kelas Objective-C lainnya:
#import "java/util/BitSet.h"
...
JavaUtilBitSet *bitset = [[JavaUtilBitSet alloc] init];
[bitset setWithInt:10 withBOOL:YES];
BOOL b = [bitset getWithInt:10];