Mapping dei nomi
Java utilizza i pacchetti per definire in modo informale gli spazi dei nomi; mentre Objective C++ ha spazi dei nomi C++,
l'obiettivo C no. Per mantenere l'univocità dei nomi quando utilizzi classi di più pacchetti,
J2ObjC antepone al nome del tipo una versione con custodia in pelle di cammello. Ad esempio:
java.util.Map
è stato rinominato in JavaUtilMap
.
Purtroppo, i nomi dei pacchetti con lettere maiuscole possono ridurre la leggibilità del codice generato, in particolare
con nomi di pacchetti lunghi. Ad esempio, Google Guava's
Annotazione beta
si trova nel pacchetto com.google.common.annotations
, e ComGoogleCommonAnnotationsBeta
è più difficile
di Beta
.
Definizione di un prefisso del pacchetto
La convenzione Objective-C per la definizione degli spazi dei nomi informali consiste nell'utilizzare un prefisso condiviso, di solito due
lettere maiuscole. iOS Foundation Framework utilizza "NS" (da
NeXTStep), ad esempio. Semplificare la versione beta di Google Guava
nome, un prefisso come "GG" migliorerebbe la leggibilità facendo riferimento a Beta
come GGBeta
.
J2ObjC supporta gli sviluppatori che specificano i propri prefissi da mappare ai nomi dei pacchetti. Questa operazione viene eseguita
la riga di comando utilizzando --prefix package=prefix
. Abbreviare tutti i nomi delle classi in
Il pacco di Beta
, "--prefix com.google.common.annotations=GG
" . Un separato
è necessaria una dichiarazione del prefisso per ogni pacchetto.
Definizione di un unico prefisso per più pacchetti
Le librerie più piccole hanno spesso nomi di classi Java che non sono in conflitto e, di conseguenza, possono condividere un unico prefisso
con una specifica del pacchetto con caratteri jolly. Ad esempio, tutti i pacchetti Joda-Time possono condividere lo stesso prefisso JT, utilizzando --prefix
'org.joda.time.*=JT'
. L'unico carattere jolly supportato è "*", che corrisponde allo stesso modo
della riga di comando usa i nomi dei file.
Definizione di più prefissi pacchetto
Per semplificare la specifica di diverse definizioni di prefissi, è possibile utilizzare un file di proprietà con
"--prefixes
file" argomento:
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>
Classi con prefisso nel runtime
Poiché l'app completa ha classi con prefissi, non è possibile individuarle utilizzando la versione Java originale
per impostazione predefinita. Tuttavia, se nella risorsa dell'app è presente un file denominato prefixes.properties
gruppo con i prefissi utilizzati per la traduzione, Class.forName(javaName)
troverà la classe mappata.
Per aggiungere prefixes.properties sopra a un'app per iOS in Xcode, apri le fasi di build del target della build scheda, espandi la sezione Copia risorse bundle e aggiungi all'elenco il file prefixes.properties. Nella pagina Risorse Java sono disponibili ulteriori informazioni sulla mappatura dei concetti delle risorse Java su iOS Google Cloud.