Pemetaan Nama
Java menggunakan paket untuk menentukan namespace secara informal; sedangkan Objective C++ memiliki namespace C++,
Objective C++ tidak. Untuk mempertahankan keunikan nama saat menggunakan class dari beberapa paket,
J2ObjC menambahkan versi paket camel-case ke nama jenis. Misalnya,
java.util.Map
diganti namanya menjadi JavaUtilMap
.
Sayangnya, nama paket camel-case dapat mengurangi keterbacaan kode yang dihasilkan, terutama
dengan nama paket yang panjang. Misalnya, anotasi Beta Google Guava berada dalam paket com.google.common.annotations
, dan ComGoogleCommonAnnotationsBeta
lebih sulit dibaca daripada Beta
.
Menentukan Awalan Paket
Konvensi Objective-C untuk menentukan namespace informal adalah dengan menggunakan awalan bersama, biasanya dua huruf besar. Misalnya, Framework Foundation iOS menggunakan "NS" (dari NeXTStep). Untuk menyederhanakan nama Beta Google Guava, awalan seperti "GG" akan meningkatkan keterbacaan dengan merujuk ke Beta
sebagai GGBeta
.
J2ObjC mendukung developer yang menentukan awalan mereka sendiri untuk dipetakan ke nama paket. Hal ini dilakukan di
command line menggunakan --prefix package=prefix
. Untuk menyingkat semua nama class dalam
paket Beta
, "--prefix com.google.common.annotations=GG
"" akan digunakan. Deklarasi awalan
terpisah diperlukan untuk setiap paket.
Menentukan Satu Awalan untuk Beberapa Paket
Library yang lebih kecil sering kali memiliki nama class Java yang tidak bertentangan, sehingga dapat berbagi satu awalan
dengan spesifikasi paket karakter pengganti. Misalnya, semua paket Joda-Time dapat memiliki awalan JT yang sama, menggunakan --prefix
'org.joda.time.*=JT'
. Satu-satunya karakter pengganti yang didukung adalah '*', yang cocok dengan shell perintah command-line dengan nama file.
Menentukan Beberapa Awalan Paket
Untuk menyederhanakan penentuan beberapa definisi awalan, file properti dapat digunakan dengan
argumen "--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>
Class yang Diawali Saat Runtime
Karena aplikasi yang sudah selesai memiliki class dengan awalan, class tersebut tidak dapat ditemukan menggunakan nama class Java
default secara default. Namun, jika aplikasi memiliki file bernama prefixes.properties di paket resource-nya dengan awalan yang digunakan untuk terjemahan, Class.forName(javaName)
akan menemukan class yang dipetakan.
Untuk menambahkan prefixes.properties di atas ke aplikasi iOS di Xcode, buka tab Build Phases pada target build, luaskan bagian Salin Bundle Resources, dan tambahkan file prefixes.properties ke daftar tersebut. Java Resources memiliki informasi lebih lanjut tentang cara konsep resource Java dipetakan ke resource iOS.