Paket adları için ön ek belirtme

Ad Eşleme

Java, ad alanlarını resmi olmayan şekilde tanımlamak için paketleri kullanır. Hedef C++ ise C++ ad alanlarına sahiptir, Amaçlı C ise yoktur. Birden fazla paketteki sınıfları kullanırken adın benzersizliğini korumak için J2ObjC, paket adının başında deve ile başa çıkar. Örneğin, java.util.Map JavaUtilMap olarak yeniden adlandırıldı.

Maalesef develerle büyük paket adları, oluşturulan kodun okunabilirliğini azaltabilir. Özellikle de uzun paket adları kullanıldığında. Örneğin, Google Guava'nın Beta ek açıklaması com.google.common.annotations paketindedir ve ComGoogleCommonAnnotationsBeta metninin okunması Beta ile kıyaslandığında daha zordur.

Paket Öneki Tanımlama

Gayrimenkul ad alanlarını tanımlamak için Objective-C kuralı, genellikle iki büyük harf olan paylaşılan bir ön ek kullanmaktır. Örneğin, iOS Temel Çerçevesi "NS" kullanır (NeXTstep tarafından). Google Guava'nın Beta adını basitleştirmek için "GG" gibi bir ön ek, Beta yerine GGBeta adını kullanarak okunabilirliği iyileştirir.

J2ObjC, paket adlarını eşlemek için kendi öneklerini belirten geliştiricilerin kullanımını destekler. Bu işlem, --prefix package=prefix kullanılarak komut satırında yapılır. Beta adlı paketindeki tüm sınıf adlarını kısaltmak için "--prefix com.google.common.annotations=GG" kullanılır. Her paket için ayrı bir ön ek beyanı gereklidir.

Birden Çok Paket İçin Tek Bir Önek Tanımlama

Küçük kitaplıkların genellikle çakışmayan Java sınıfı adları vardır. Bu nedenle, joker karakterli bir paket spesifikasyonuyla tek bir ön ek paylaşılabilir. Örneğin, tüm Joda-Time paketleri --prefix 'org.joda.time.*=JT' kullanarak aynı JT ön ekini paylaşabilir. Desteklenen tek joker karakter, "*" karakteridir. Bu satır, komut satırı kabuğunun dosya adlarıyla aynı şekilde eşleşir.

Birden Çok Paket Öneki Tanımlama

Birkaç önek tanımı belirtmeyi kolaylaştırmak için bir özellik dosyası "--prefixes dosya" bağımsız değişkeniyle kullanılabilir:

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 Ön Ek Sınıflar

Tamamlanan uygulamada ön ek içeren sınıflar olduğundan, varsayılan olarak orijinal Java sınıf adını kullanarak bulunamazlar. Bununla birlikte, uygulamanın kaynak paketinde çeviri için kullanılan ön eklerle prefixes.property adında bir dosya varsa Class.forName(javaName), eşlenen sınıfı bulur.

Yukarıdaki prefixes.propertys'i Xcode'daki bir iOS uygulamasına eklemek için derleme hedefinin Derleme Aşamaları sekmesini açın, paket kaynaklarının kopyala bölümünü genişletin ve prefixes.property dosyasını bu listeye ekleyin. Java Kaynakları, Java kaynak kavramlarının iOS kaynaklarıyla nasıl eşlendiği hakkında daha fazla bilgi içerir.