パッケージ名の接頭辞を指定する方法。

名前マッピング

Java ではパッケージを使用して名前空間を非公式に定義します。一方、Objective-C++ には C++ 名前空間、 Objective C は違います。複数のパッケージのクラスを使用するときに名前の一意性を維持するには、 J2ObjC は、型名の前にキャメルケース バージョンのパッケージを付加します。たとえば java.util.Map の名前が JavaUtilMap に変更されました。

残念ながら、キャメルケース形式のパッケージ名があると、特に 記述する必要があります。たとえば、Google Guava の ベータ版アノテーション com.google.common.annotations パッケージに含まれているが、ComGoogleCommonAnnotationsBeta の方が Beta より長くなります。

パッケージ接頭辞の定義

非公式の名前空間を定義する Objective-C の慣例では、共通の接頭辞(通常は 2 つ)を使用します。 使用します。iOS Foundation Framework では、「NS」という( NeXTStep など)を指定します。Google Guava のベータ版を 「GG」などの接頭辞BetaGGBeta と参照することで読みやすさが向上します。

J2ObjC は、デベロッパーが独自の接頭辞を指定してパッケージ名にマッピングすることをサポートしています。これは --prefix package=prefix を使用してコマンドラインで実行します。すべてのクラス名を短縮するには、 Beta のパッケージ「--prefix com.google.common.annotations=GG」使用されます独立した 接頭辞の宣言がパッケージごとに必要です。

複数のパッケージに対する単一の接頭辞の定義

小規模なライブラリは、多くの場合、競合しない Java クラス名を持つため、1 つの接頭辞を共有できます。 パッケージ仕様のワイルドカードを使用できます。たとえば、--prefix 'org.joda.time.*=JT' を使用すると、すべての Joda-Time パッケージで同じ JT 接頭辞を共有できます。サポートされているワイルドカード文字は「*」のみです。これは ファイル名を使用します。

複数のパッケージ接頭辞の定義

複数の接頭辞の定義を簡単に指定するために、 「--prefixes ファイル」引数:

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>

実行時の接頭辞付きクラス

完成したアプリには接頭辞付きのクラスがあるため、元の Java ではそれらのクラスを見つけることができません クラス名を使用します。ただし、アプリのリソースに prefixes.properties という名前のファイルがある場合は、 変換に使用する接頭辞を持つバンドルを追加すると、Class.forName(javaName) はマッピングされたクラスを検索します。

上記の prefixes.properties を Xcode で iOS アプリに追加するには、ビルド ターゲットの [Build Phases] を開きます。 [Copy Bundle Resources] セクションを開き、そのリストに prefixes.properties ファイルを追加します。 Java リソースのコンセプトと iOS のマッピングについては、Java リソースをご覧ください。 説明します。