Mapowanie nazwy zajęć
Ponieważ J2ObjC tłumaczy tylko klasy Java nieobsługujące interfejsu użytkownika, aplikacja na iOS musi współpracować bezpośrednio przetłumaczonych lekcji. Przetłumaczone klasy są standardowymi klasami Objective-C z dostępem do obiektu NSObject, ale pomaga zrozumieć sposób konwertowania nazw klas, metod, parametrów i plików nagłówka.
Java używa pakietów do definiowania przestrzeni nazw, natomiast Objective-C nie ma pakietów i zamiast tego używa
konwencji umieszczania wspólnego prefiksu przed powiązanymi klasami (np. NSObject i NSString). Do
zachować przestrzenie nazw Java, nazwy pakietów są mapowane na prefiks wielbłąda. Przykład:
Pole java.util.List
jest domyślnie mapowane na wartość JavaUtilList
. Ten domyślny prefiks można ustawić wprost
przy użyciu opcji prefiksu pakietu j2objc.
Nazwy parametrów
Java odróżnia przeciążone metody według typów argumentów, natomiast w Objective-C używa się argumentów
nazw. J2ObjC tworzy więc nazwy argumentów na podstawie ich typów. Oto jak na przykład
jest wstawiony na początku obiektu ArrayList
, gdzie lista jest następnie dodawana do kolejnej
lista:
[someList addWithInt:0 withId:object];
[otherList addAllWithJavaUtilCollection:somelist];
Nazwa każdego argumentu składa się ze słowa „with” i jego typ. To trochę nieprzyjemne, ale masz pewność, że tak samo jest zawsze wywoływana w Objective-C, tak jak w Javie.
Nazwy nagłówków
Pliki nagłówka nie mają jednak zmapowanych nazw, ale zamiast tego mają ścieżkę źródłowego pliku w Javie kończąca się na „.h” zamiast „.java”. Dzięki temu narzędzia pomocnicze, takie jak Xcode i Maker, ale na pierwszy rzut oka może być niejasne, ponieważ:
#import "java/util/Date.h"
deklaruje klasę JavaUtilDate
, a nie Date
.
Korzystanie z tłumaczonych klas
Inne niż nieparzyste nazwy (które można uprościć za pomocą prefiksów pakietu) Przetłumaczone klasy są używane tak samo jak inne klasy Objective-C:
#import "java/util/BitSet.h"
...
JavaUtilBitSet *bitset = [[JavaUtilBitSet alloc] init];
[bitset setWithInt:10 withBOOL:YES];
BOOL b = [bitset getWithInt:10];