Pemetaan Nama
Java menggunakan paket untuk menentukan namespace secara informal; sementara Objective C++ memiliki namespace C++,
Tujuan C tidak demikian. Untuk mempertahankan keunikan nama saat menggunakan class dari beberapa paket,
J2ObjC menambahkan versi camel-case dari paket ke nama jenis. Misalnya,
java.util.Map
diganti namanya menjadi JavaUtilMap
.
Sayangnya, nama paket {i>camel-cased<i} bisa mengurangi keterbacaan kode yang dihasilkan,
dengan nama paket yang panjang. Misalnya, layanan Google Guava
Anotasi beta
ada dalam paket com.google.common.annotations
, dan ComGoogleCommonAnnotationsBeta
lebih sulit untuk
dibaca dari Beta
.
Menentukan Awalan Paket
Konvensi Objective-C untuk mendefinisikan namespace informal adalah menggunakan awalan bersama, biasanya dua
huruf besar semua. iOS Foundation Framework menggunakan "NS" (dari
NeXTStep), misalnya. Untuk menyederhanakan program Beta Google Guava
nama, awalan seperti "GG" akan meningkatkan keterbacaan dengan menyebut Beta
sebagai GGBeta
.
J2ObjC mendukung developer yang menentukan awalan mereka sendiri untuk dipetakan ke nama paket. Hal ini dilakukan pada
command line menggunakan --prefix package=prefix
. Untuk mempersingkat semua
nama kelas di
Paket Beta
, "--prefix com.google.common.annotations=GG
"" apa yang akan digunakan. terpisah
deklarasi awalan diperlukan untuk setiap paket.
Menentukan Awalan Tunggal untuk Beberapa Paket
Library yang lebih kecil sering memiliki nama class Java yang tidak bertentangan, sehingga dapat menggunakan satu awalan yang sama
dengan spesifikasi paket {i>wildcard<i}. 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 cara yang sama
yang dilakukan {i>command line<i} dengan
nama file.
Menentukan Beberapa Awalan Paket
Untuk menyederhanakan penentuan beberapa definisi awalan, file properti dapat digunakan dengan
"--prefixes
file" argumen:
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 Telah Diawali di Runtime
Karena aplikasi yang sudah selesai memiliki class dengan awalan, aplikasi tersebut tidak dapat ditemukan menggunakan Java asli
secara default. Namun, jika aplikasi memiliki file bernama prefixes.properties di resource-nya
paket 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 Build Fase target build tab, luaskan bagian Copy Bundle Resources, dan tambahkan file prefixes.properties ke daftar tersebut. Resource Java memiliki informasi lebih lanjut tentang cara pemetaan konsep resource Java ke iOS Google Cloud Platform.