So geben Sie Präfixe für Paketnamen an.

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.