Cómo especificar prefijos para nombres de paquetes

Asignación de nombres

Java usa paquetes para definir espacios de nombres de manera informal. mientras que Objective C++ tiene espacios de nombres C++, El objetivo C, no. Para preservar la exclusividad de los nombres cuando se usan clases de varios paquetes, J2ObjC antepone una versión del paquete con mayúsculas mediales al nombre del tipo. Por ejemplo: Se cambió el nombre de java.util.Map por JavaUtilMap.

Desafortunadamente, los nombres de paquetes con mayúsculas mediales pueden reducir la legibilidad del código generado, especialmente con nombres de paquetes largos. Por ejemplo, Google Guava's Anotación beta se encuentra en el paquete com.google.common.annotations, y ComGoogleCommonAnnotationsBeta es más difícil de de lectura que el Beta.

Cómo definir un prefijo de paquete

La convención de Objective-C para definir espacios de nombres informales es usar un prefijo compartido, generalmente dos letras mayúsculas. El framework de iOS Foundation usa “NS” (desde NeXTStep), por ejemplo. Simplifica la versión beta de Google Guava nombre, un prefijo como “GG” mejoraría la legibilidad, refiriéndose a Beta como GGBeta.

J2ObjC permite que los desarrolladores especifiquen sus propios prefijos para asignar a nombres de paquetes. Esto se realiza en la línea de comandos con --prefix package=prefix. Para acortar todos los nombres de las clases en El paquete de Beta, el "--prefix com.google.common.annotations=GG" que se usará. Un grupo de anuncios independiente se requiere una declaración de prefijo para cada paquete.

Cómo definir un prefijo único para varios paquetes

Las bibliotecas más pequeñas suelen tener nombres de clase Java que no entran en conflicto, por lo que pueden compartir un solo prefijo con una especificación de paquete comodín. Por ejemplo, todos los paquetes de Joda-Time pueden compartir el mismo prefijo JT mediante --prefix 'org.joda.time.*=JT'. El único carácter comodín admitido es “*”, que coincide de la misma manera que de línea de comandos de shell con los nombres de archivo.

Cómo definir varios prefijos de paquetes

Para simplificar la especificación de varias definiciones de prefijos, se puede usar un archivo de propiedades con el “--prefixes file” argumento:

cat prefixes.properties
com.google.common.annotations: GG
com.google.common.base: GG

# While GG can be used for all packages, let's mix it up.
com.google.common.collect: GC
com.google.common.io: GIO        # A prefix can be more than two characters,
com.google.common.net: GuavaNet  # a lot more!
...
j2objc --prefixes prefixes.properties <args>

Clases con prefijos en el entorno de ejecución

Como la app finalizada tiene clases con prefijos, no se pueden ubicar con el Java original. de clase predeterminada de forma predeterminada. Sin embargo, si la app tiene un archivo llamado prefixes.properties en su recurso con los prefijos usados para la traducción, Class.forName(javaName) encontrará la clase asignada.

Para agregar las prefixes.properties anteriores a una app para iOS en Xcode, abre las fases de compilación del destino de compilación. expande la sección Copy Bundle Resources y agrega el archivo prefixes.properties a esa lista. Recursos de Java tiene más información sobre cómo los conceptos de los recursos de Java se asignan a iOS. de Google Cloud.