Ad Eşleme
Java, ad alanlarını resmi olmayan bir şekilde tanımlamak için paketleri kullanır; Objective C++ ise C++ ad alanlarına sahiptir ve
C hedefi bunu yapmaz. Birden fazla paketteki sınıfları kullanırken adın benzersizliğini korumak için
J2ObjC, tür adının başına paketin deve büyük harf içeren sürümünü ekler. Örneğin,
java.util.Map
, JavaUtilMap
olarak yeniden adlandırıldı.
Maalesef büyük/küçük harf içeren paket adları, özellikle de küçük resim olmak üzere, oluşturulan kodun okunabilirliğini
uzun paket adlarına sahip olur. Örneğin, Google Guava'nın
Beta ek açıklaması
com.google.common.annotations
paketinde bulunuyor, ComGoogleCommonAnnotationsBeta
ise daha zor
Beta
oranından daha okuma.
Paket Öneki Tanımlama
Gayri resmî ad alanları tanımlamak için kullanılan Objective-C kuralı, ortak bir önek (genellikle iki) kullanmaktır.
büyük harfle başlayın. iOS Foundation Framework "NS" kullanır (kaynak:
NeXTStep). Google Guava'nın Beta sürümünü basitleştirmek için
ad, "GG" gibi bir önek Beta
terimini GGBeta
olarak belirterek okunabilirliği artıracaktır.
J2ObjC, geliştiricilerin paket adlarını eşlemek için kendi ön eklerini belirtmesini destekler. Bu işlem
komut satırını --prefix package=prefix
kullanarak değiştirin. için tüm sınıf adlarını kısaltmak
Beta
adlı kullanıcının paketi, "--prefix com.google.common.annotations=GG
" için kullanılır. Ayrı bir
her paket için önek bildirimi gereklidir.
Birden Çok Paket için Tek Bir Önek Tanımlama
Küçük kitaplıklar genellikle çakışmayan Java sınıf adlarına sahiptir ve bu nedenle tek bir ön eki paylaşabilir
joker karakterli bir paket spesifikasyonuna sahip olması gerekir. Örneğin, tüm Joda-Time paketleri --prefix
'org.joda.time.*=JT'
kullanılarak aynı JT ön ekini paylaşabilir. Desteklenen tek joker karakter olan "*",
komut satırı kabuğunun dosya adlarındaki işleyiş şeklidir.
Birden Çok Paket Ön Eki Tanımlama
Birkaç ön ek tanımını belirtmeyi kolaylaştırmak için bir özellikler dosyası
"--prefixes
dosyası" bağımsız değişken:
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>
Çalışma Zamanında Önekli Sınıflar
Tamamlanmış uygulamada ön ek içeren sınıflar bulunduğundan, bu sınıflar orijinal Java kullanılarak bulunamaz.
varsayılan olarak sınıf adıdır. Ancak, uygulamanın kaynağında prefixes.properties adlı bir dosya varsa
önekleri içeren bir paket eklerseniz Class.forName(javaName)
, eşlenen sınıfı bulur.
Xcode'da bir iOS uygulamasına yukarıdaki prefixes.properties dosyasını eklemek için derleme hedefinin Derleme Aşamalarını açın sekmesinde, Paket Kaynaklarını Kopyala bölümünü genişletin ve prefixes.properties dosyasını bu listeye ekleyin. Java Kaynakları'nda, Java kaynak kavramlarının iOS ile nasıl eşlendiği hakkında daha fazla bilgi bulabilirsiniz kaynaklar.