Mappage des noms de classe
J2ObjC ne traduit que les classes Java autres que l'interface utilisateur. Par conséquent, une application iOS doit travailler directement avec les classes traduites. Les classes traduites sont des classes Objective-C standards racines dans NSObject, mais elles permet de comprendre comment les noms des fichiers de classe, de méthode, de paramètre et d'en-tête sont convertis.
Java utilise des packages pour définir des espaces de noms, alors qu'Objective-C n'en a pas,
qui consiste à placer un préfixe partagé devant des classes associées (telles que NSObject et NSString). À
conserver les espaces de noms Java, les noms de package sont mappés sur un préfixe en Camel Case ("casse de chameau"). Par exemple :
Par défaut, java.util.List
est mappée sur JavaUtilList
. Ce préfixe par défaut peut être défini explicitement
à l'aide des options de préfixe de package de j2objc
Noms des paramètres
Java différencie les méthodes surchargées par leurs types d'arguments, tandis qu'Objective-C utilise des arguments
noms. J2ObjC crée donc des noms d'argument à partir de leurs types. Par exemple, voici comment un
est inséré au début d'un élément ArrayList
et indique comment cette liste est ajoutée à une autre
liste:
[someList addWithInt:0 withId:object];
[otherList addAllWithJavaUtilCollection:somelist];
Chaque nom d'argument se compose de "with" ainsi que son type. C'est un peu moche, mais cela garantit que la même est toujours appelée dans Objective-C, comme avec Java.
Noms d'en-têtes
Toutefois, les noms des fichiers d'en-tête ne sont pas mappés, mais le chemin du fichier source Java est utilisé. se terminant par ".h" au lieu de ".java". Cela rend les outils de soutien comme Xcode et Make beaucoup plus facile, mais cela peut être un peu déroutant au premier abord, puisque:
#import "java/util/Date.h"
déclare la classe JavaUtilDate
, et non Date
.
Utiliser des classes traduites
Outre les noms impairs (qui peuvent être simplifiés avec des préfixes de package), les classes traduites sont utilisées comme toute autre classe Objective-C:
#import "java/util/BitSet.h"
...
JavaUtilBitSet *bitset = [[JavaUtilBitSet alloc] init];
[bitset setWithInt:10 withBOOL:YES];
BOOL b = [bitset getWithInt:10];