Lee las fuentes generadas

Asignación de nombre de clase

Como J2ObjC solo traduce clases que no son de IU de Java, una aplicación para iOS debe funcionar directamente con las clases traducidas. Las clases traducidas son clases regulares de Objective-C basadas en NSObject, pero ayudan a comprender cómo se convierten los nombres de clases, métodos, parámetros y archivos de encabezado.

Java usa paquetes para definir los espacios de nombres, mientras que Objective-C no los tiene y, en su lugar, tiene la convención de colocar un prefijo compartido frente a clases relacionadas (como NSObject y NSString). Para conservar los espacios de nombres de Java, los nombres de los paquetes se asignan a un prefijo con mayúsculas y minúsculas. Por ejemplo, java.util.List se asigna de forma predeterminada a JavaUtilList. Este prefijo predeterminado se puede configurar de forma explícita mediante las opciones de prefijo del paquete de j2objc.

Nombres de parámetros

Java diferencia los métodos sobrecargados por sus tipos de argumentos, mientras que Objective-C usa nombres de argumentos. Por lo tanto, J2ObjC crea nombres de argumento a partir de sus tipos. Por ejemplo, aquí se muestra cómo se inserta un objeto en el comienzo de un ArrayList y cómo se agrega esa lista a otra lista:

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

Cada nombre de argumento consta de "with" más su tipo. Esto es un poco feo, pero garantiza que siempre se invoque el mismo método en Objective-C que en Java.

Nombres de encabezados

Sin embargo, los archivos de encabezado no tienen sus nombres asignados, sino la ruta de acceso del archivo de origen Java que termina en ".h" en lugar de ".java". Esto hace que las herramientas de asistencia, como Xcode y Make, sean mucho más fáciles, pero al principio puede ser un poco confuso, ya que:

#import "java/util/Date.h"

declara la clase JavaUtilDate, no Date.

Cómo usar clases traducidas

Aparte de los nombres impares (que se pueden simplificar con prefijos de paquete), las clases traducidas se usan como cualquier otra clase de Objective-C:

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