Como ler origens geradas

Mapeamento de nome de classe

Como o J2ObjC traduz apenas classes Java que não são de IU, um aplicativo iOS precisa trabalhar diretamente com as classes traduzidas. As classes traduzidas são classes regulares de Objective-C com base em 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 Objective-C não tem pacotes e tem uma convenção 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 com concatenação. 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

O Java diferencia os métodos sobrecarregados pelos tipos de argumento, enquanto o Objective-C usa nomes de argumentos. Portanto, o J2ObjC cria nomes de argumentos dos próprios tipos. Por exemplo, veja como um objeto é inserido no início de um ArrayList e como essa lista é adicionada a outra lista:

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

Cada nome de argumento consiste em "with" e o tipo dele. Isso é um pouco feio, mas garante que o mesmo método seja sempre invocado no Objective-C como no Java.

Nomes dos cabeçalhos

No entanto, os nomes dos arquivos de cabeçalho não são mapeados, mas o caminho do arquivo de origem Java termina com ".h" em vez de ".java". Isso facilita muito o suporte a ferramentas como o Xcode e o 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 pacotes), 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];