Cara menentukan awalan untuk nama paket.

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.