Jak określić prefiksy nazw pakietów.

Mapowanie nazw

Java używa pakietów do nieformalnego definiowania przestrzeni nazw. Cel w C++ ma takie przestrzenie nazw, jak C++ – nie. Aby zachować niepowtarzalność nazwy podczas używania klas z wielu pakietów, pakiet J2ObjC dodaje na początku nazwy pakietu wielbłąda. Na przykład java.util.Map ma teraz nazwę JavaUtilMap.

Niestety, nazwy pakietów wielbłądów mogą zmniejszać czytelność wygenerowanego kodu, zwłaszcza w przypadku długich nazw pakietów. Na przykład adnotacja Beta Google Guavy znajduje się w pakiecie com.google.common.annotations, a ComGoogleCommonAnnotationsBeta jest trudniejszy do odczytania niż Beta.

Definiowanie prefiksu pakietu

W przypadku konwencjonalnych przestrzeni nazw stosuje się konwencję C – należy używać wspólnego prefiksu (zwykle 2 wielkie litery). iOS Foundation Framework wykorzystuje na przykład „NS” (z NeXTStep). Aby uprościć nazwę wersji beta Google Guava, prefiks, np. „GG”, zwiększy czytelność, ustawiając Beta jako GGBeta.

J2ObjC obsługuje programistów określających własne prefiksy mapowania nazw pakietów. Można to zrobić w wierszu poleceń za pomocą polecenia --prefix package=prefix. Aby skrócić wszystkie nazwy klas z pakietu Beta, zostanie użyte „--prefix com.google.common.annotations=GG”. Dla każdego pakietu wymagana jest osobna deklaracja prefiksu.

Definiowanie pojedynczego prefiksu dla wielu pakietów

Mniejsze biblioteki często mają nazwy klas Java, które nie wchodzą w konflikt, co oznacza, że mogą mieć pojedynczy prefiks ze specyfikacją pakietu z symbolem wieloznacznym. Na przykład wszystkie pakiety Joda-Time mogą mieć taki sam prefiks JT przy użyciu --prefix 'org.joda.time.*=JT'. Jedynym obsługiwanym symbolem wieloznacznym jest znak „*”, który jest zgodny z nazwami plików powłoką wiersza poleceń.

Definiowanie wielu prefiksów pakietów

Aby uprościć określanie kilku definicji prefiksu, można użyć pliku właściwości z argumentem „--prefixesfile”:

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>

Klasy z prefiksem w środowisku wykonawczym

Ukończona aplikacja ma klasy z prefiksami, więc nie można jej domyślnie zlokalizować przy użyciu pierwotnej nazwy klasy Java. Jeśli jednak w aplikacji jest plik o nazwie prefixes.property z prefiksami używanymi do tłumaczenia, Class.forName(javaName) znajdzie zmapowaną klasę.

Aby dodać powyższe atrybuty prefixes.property do aplikacji na iOS w Xcode, otwórz kartę Etapy kompilacji celu, rozwiń sekcję Zasoby kopiowania i dodaj do niej plik prefixes.property. Zasoby Java zawierają dodatkowe informacje o tym, jak koncepcje zasobów Java są mapowane na zasoby iOS.