Namenszuordnung
Java verwendet Pakete, um Namespaces informell zu definieren. Objective C++ hingegen hat C++-Namespaces,
Für Objective-C ist das nicht der Fall. Um die Eindeutigkeit von Namen beizubehalten, wenn Klassen aus mehreren Paketen verwendet werden,
J2ObjC stellt dem Typnamen eine Camel-Case-Version des Pakets voran. Beispiel:
java.util.Map
wurde in JavaUtilMap
umbenannt.
Leider können Namen von Paketen in Camel-Case-Schreibweise die Lesbarkeit des generierten Codes verringern, insbesondere
mit langen Paketnamen. Zum Beispiel hat Google Guava
Betaanmerkung
ist im com.google.common.annotations
-Paket enthalten und ComGoogleCommonAnnotationsBeta
ist schwerer zu
gelesen als Beta
.
Definieren eines Paketpräfixes
Die Objective-C-Konvention zur Definition von informellen Namespaces besteht darin, ein gemeinsames Präfix zu verwenden, das normalerweise zwei
Großbuchstaben. Das iOS Foundation Framework verwendet „NS“ (von
NeXTStep). Zur Vereinfachung der Betaversion von Google Guava
Name, ein Präfix wie „GG“ würde die Lesbarkeit verbessern, indem Beta
als GGBeta
bezeichnet wird.
J2ObjC unterstützt Entwickler dabei, eigene Präfixe für die Zuordnung zu Paketnamen anzugeben. Dies geschieht am
in die Befehlszeile mit --prefix package=prefix
. Um alle Kursnamen in
Paket von Beta
, „--prefix com.google.common.annotations=GG
“ verwendet werden. Eine separate
Präfixdeklaration ist für jedes Paket erforderlich.
Definieren eines einzelnen Präfixes für mehrere Pakete
Kleinere Bibliotheken haben häufig nicht in Konflikt stehende Java-Klassennamen und können daher ein einzelnes Präfix gemeinsam nutzen
durch eine Paketspezifikation mit Platzhaltern. Beispielsweise können alle Joda-Time-Pakete dasselbe JT-Präfix mit --prefix
'org.joda.time.*=JT'
haben. Das einzige unterstützte Platzhalterzeichen ist „*“, das mit dem
in der Befehlszeilen-Shell.
Mehrere Paketpräfixe definieren
Um die Angabe mehrerer Präfixdefinitionen zu vereinfachen, kann eine Eigenschaftsdatei mit dem Parameter
„--prefixes
Datei“ Argument:
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>
Klassen mit Präfix während der Laufzeit
Da die fertige Anwendung Klassen mit Präfixen hat, können sie nicht mit der ursprünglichen Java-Version gefunden werden.
standardmäßig den Namen der Klasse. Wenn die Ressource der Anwendung jedoch eine Datei mit dem Namen prefixes.properties enthält
Bundle mit den für die Übersetzung verwendeten Präfixen enthält, sucht Class.forName(javaName)
die zugeordnete Klasse.
Um die obige Datei prefixes.properties zu einer iOS-App in Xcode hinzuzufügen, öffnen Sie die Build-Phasen des Build-Ziels. Maximieren Sie den Abschnitt "Paketressourcen kopieren" und fügen Sie dieser Liste die Datei prefixes.properties hinzu. Unter Java-Ressourcen finden Sie weitere Informationen dazu, wie Java-Ressourcenkonzepte iOS zugeordnet werden. Ressourcen.