Lecture des sources générées

Mappage des noms de cours

Étant donné que J2ObjC ne traduit que les classes Java sans interface utilisateur, une application iOS doit fonctionner directement avec les classes traduites. Les classes traduites sont des classes Objective-C root standards, mais elles aident à comprendre comment les noms de fichiers de classe, de méthode, de paramètre et d'en-tête sont convertis.

Java utilise des packages pour définir les espaces de noms, tandis qu'Objective-C ne dispose pas de packages et utilise plutôt une convention consistant à placer un préfixe partagé devant les classes associées (telles que NSObject et NSString). Pour conserver les espaces de noms Java, les noms de packages sont mappés sur un préfixe en camel case. Par exemple, java.util.List est mappé par défaut 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 que Objective-C utilise des noms d'argument. J2ObjC crée donc des noms d'argument à partir de ses types. Par exemple, voici comment un objet est inséré au début d'un ArrayList et comment cette liste est ensuite ajoutée à une autre liste:

[someList addWithInt:0 withId:object];
[otherList addAllWithJavaUtilCollection:somelist];

Chaque argument se compose de "avec" suivi de son type. Cela n'est pas très facile, mais cela garantit que la même méthode est toujours appelée dans Objective-C comme avec Java.

Noms d'en-têtes

Cependant, les noms des fichiers d'en-tête ne sont pas mappés, mais le chemin du fichier source Java se terminant par ".h" au lieu de ".java". Cela facilite grandement la compatibilité avec des outils tels que Xcode et Make, mais cela peut être un peu déroutant au départ, car:

#import "java/util/Date.h"

déclare la classe JavaUtilDate, et non Date.

Utiliser des classes traduites

Hormis les noms impairs (qui peuvent être simplifiés avec des préfixes de package), les classes traduites sont utilisées comme n'importe quelle autre classe Objective-C:

#import "java/util/BitSet.h"
...
  JavaUtilBitSet *bitset = [[JavaUtilBitSet alloc] init];
  [bitset setWithInt:10 withBOOL:YES];
  BOOL b = [bitset getWithInt:10];