Mapowanie nazw
Java używa pakietów do nieformalnego definiowania przestrzeni nazw. natomiast Objective C++ ma przestrzenie nazw C++,
Objective-C tego nie robi. Aby zachować niepowtarzalność nazw przy korzystaniu z klas z wielu pakietów,
J2ObjC dołącza do nazwy typu wersję pakietu z wielbłądem. Przykład:
Nazwa java.util.Map
została zmieniona na JavaUtilMap
.
Niestety nazwy pakietów z wielkimi literami wielbłądów mogą zmniejszać czytelność wygenerowanego kodu, zwłaszcza
z długimi nazwami pakietów. Na przykład: Google Guava's
Adnotacja (beta)
jest w pakiecie com.google.common.annotations
, a ComGoogleCommonAnnotationsBeta
trudniej jest
odczytano niż Beta
.
Definiowanie prefiksu pakietu
Zgodnie z konwencją Objective-C do definiowania nieformalnych przestrzeni nazw stosuje się wspólny prefiks, zwykle dwa
wielkimi literami. Platforma iOS Foundation Framework używa „NS” (z
NeXTStep). Aby uprościć korzystanie z wersji beta Google Guava
nazwę, prefiks, np. „GG”. poprawi czytelność, ponieważ określa Beta
jako GGBeta
.
J2ObjC umożliwia programistom określenie własnych prefiksów do zmapowania na nazwy pakietów. Odbywa się to na
w wierszu poleceń za pomocą --prefix package=prefix
. Aby skrócić wszystkie nazwy zajęć w
Pakiet użytkownika Beta
: „--prefix com.google.common.annotations=GG
” zastosowali różne metody. Osobne
dla każdego pakietu wymagana jest deklaracja prefiksu.
Definiowanie pojedynczego prefiksu dla wielu pakietów
Mniejsze biblioteki często mają nazwy klas Java, które nie kolidują ze sobą, więc mogą mieć wspólny prefiks
ze specyfikacją pakietu z symbolami wieloznacznymi. Na przykład wszystkie pakiety Joda-Time mogą mieć ten sam prefiks JT z użyciem --prefix
'org.joda.time.*=JT'
. Jedynym obsługiwanym symbolem wieloznacznym jest „*”. Jest on taki sam jak
w której powłoka wiersza poleceń używa nazw plików.
Definiowanie wielu prefiksów pakietów
Aby uprościć określenie kilku definicji prefiksów, w pliku właściwości można użyć funkcji
„--prefixes
plik” :
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
Ponieważ gotowa aplikacja ma klasy z prefiksami, nie można ich zlokalizować przy użyciu oryginalnej Javy
nazwę klasy. Jeśli jednak zasób aplikacji ma plik o nazwie prefixes.properties
pakiet z prefiksami używanymi do tłumaczenia, Class.forName(javaName)
znajdzie zmapowaną klasę.
Aby dodać powyższy plik prefixes.properties do aplikacji na iOS w Xcode, otwórz etapy kompilacji celu kompilacji. rozwiń jej sekcję „Kopiuj zasoby pakietu” i dodaj do tej listy plik prefixes.properties. W artykule Zasoby Java znajdziesz więcej informacji na temat mapowania koncepcji zasobów Java na iOS. i zasobami Google Cloud.