Mapeamento de nome da classe
Como o J2ObjC somente traduz classes Java não UI, um aplicativo iOS precisa trabalhar diretamente com o de aulas traduzidas. As classes traduzidas são classes regulares de Objective-C enraizadas com NSObject, mas ajuda a entender como os nomes de arquivos de classe, método, parâmetro e cabeçalho são convertidos.
O Java usa pacotes para definir namespaces, enquanto o Objective-C não tem pacotes e, em vez disso,
de colocar um prefixo compartilhado na frente de classes relacionadas (como NSObject e NSString). Para
preservar namespaces Java, os nomes dos pacotes são mapeados para um prefixo CamelCase. Por exemplo:
java.util.List
é mapeado por padrão para JavaUtilList
. Esse prefixo padrão pode ser definido explicitamente
usando as opções de prefixo de pacote do j2objc.
Nomes de parâmetros
Java diferencia métodos sobrecarregados por seus tipos de argumento, enquanto Objective-C usa argumentos
nomes de domínio. Portanto, J2ObjC cria nomes de argumentos com base nos respectivos tipos. Por exemplo, veja como um
é inserido no início de uma ArrayList
e como essa lista é adicionada a outro
lista:
[someList addWithInt:0 withId:object];
[otherList addAllWithJavaUtilCollection:somelist];
Cada nome de argumento consiste em "com" mais seu tipo. Isso é um pouco ruim, mas garante que as mesmas é sempre invocado no Objective-C como era com Java.
Nomes dos cabeçalhos
No entanto, os nomes dos arquivos de cabeçalho não têm os nomes mapeados, mas têm o caminho do arquivo de origem Java e termina com ".h" em vez de ".java". Isso facilita muito ferramentas de suporte como Xcode e Make, mas pode ser um pouco confuso no início, já que:
#import "java/util/Date.h"
declara a classe JavaUtilDate
, não Date
.
Como usar classes traduzidas
Além dos nomes ímpares (que podem ser simplificados com prefixos de pacote), As classes traduzidas são usadas como qualquer outra classe Objective-C:
#import "java/util/BitSet.h"
...
JavaUtilBitSet *bitset = [[JavaUtilBitSet alloc] init];
[bitset setWithInt:10 withBOOL:YES];
BOOL b = [bitset getWithInt:10];