Come specificare i prefissi per i nomi dei pacchetti.

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.