Lecture des sources générées

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];