Mapeamento de nome
O Java usa pacotes para definir namespaces informalmente. enquanto o Objective C++ tem namespaces C++,
O Objetivo C não. Para preservar a exclusividade do nome ao usar classes de vários pacotes,
J2ObjC adiciona uma versão CamelCase do pacote ao nome do tipo. Por exemplo:
java.util.Map
foi renomeado como JavaUtilMap
.
Infelizmente, os nomes de pacotes com letras concatenadas podem reduzir a legibilidade do código gerado, especialmente
com nomes de pacotes longos. Por exemplo, o SDK do Google Guava
Anotação Beta
está no pacote com.google.common.annotations
, e ComGoogleCommonAnnotationsBeta
é mais difícil
ler do que Beta
.
Como definir um prefixo de pacote
A convenção Objective-C para definir namespaces informais é usar um prefixo compartilhado, geralmente dois
letras maiúsculas. O iOS Foundation Framework usa "NS" (de
NeXTStep), por exemplo. Para simplificar a versão Beta do Google Guava
com um nome, como "GG" melhoraria a legibilidade chamando Beta
como GGBeta
.
O J2ObjC oferece suporte aos desenvolvedores que especificam os próprios prefixos para mapear nomes de pacotes. Isso é feito em
a linha de comando usando --prefix package=prefix
. Para encurtar todos os nomes de classes em
O pacote de Beta
, o "--prefix com.google.common.annotations=GG
" seriam usados. Um módulo
prefixo é necessária para cada pacote.
Como definir um prefixo único para vários pacotes
Bibliotecas menores geralmente têm nomes de classes Java que não entram em conflito e, portanto, podem compartilhar um único prefixo
com uma especificação de pacote
com caracteres curinga. Por exemplo, todos os pacotes Joda-Time podem compartilhar o mesmo prefixo JT usando --prefix
'org.joda.time.*=JT'
. O único caractere curinga aceito é "*", que corresponde à mesma forma que o
shell da linha de comando faz com os nomes de arquivos.
Como definir vários prefixos de pacote
Para simplificar a especificação de várias definições de prefixo, é possível usar um arquivo de propriedades com a função
"--prefixes
arquivo" :
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>
Classes com prefixo no ambiente de execução
Como o app final tem classes com prefixos, elas não podem ser localizadas usando o Java original
o nome da classe por padrão. No entanto, se o aplicativo tiver um arquivo chamado prefixes.properties no recurso
com os prefixos usados para a tradução, Class.forName(javaName)
vai encontrar a classe mapeada.
Para adicionar prefixes.properties acima a um app iOS no Xcode, abra as fases de build do destino da compilação. guia, expanda a seção "Copiar recursos do pacote" e adicione o arquivo prefixes.properties a essa lista. A página Recursos Java (link em inglês) tem mais informações sobre como os conceitos de recursos Java são mapeados para iOS do Google Cloud.