Cara menentukan awalan untuk nama paket.

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.