生成されたソースの読み取り

クラス名のマッピング

J2ObjC は非 UI Java クラスのみを変換するため、iOS アプリは変換されたクラスを直接操作する必要があります。変換されたクラスは、NSObject によってルートされた標準の Objective-C クラスですが、クラス、メソッド、パラメータ、ヘッダーのファイル名の変換方法を理解するのに役立ちます。

Java ではパッケージを使用して名前空間を定義しますが、Objective-C にはパッケージがなく、関連するクラス(NSObject や NSString など)の前に共有プレフィックスを配置するという規則があります。Java 名前空間を保持するために、パッケージ名はキャメルケースの接頭辞にマッピングされます。たとえば、java.util.List はデフォルトで JavaUtilList にマッピングされています。このデフォルトの接頭辞は、j2objc のパッケージ接頭辞オプションを使用して明示的に設定できます。

パラメータ名

Java では、オーバーロードされたメソッドを引数の型で区別しますが、Objective-C は引数名を使用します。そのため、J2ObjC は型から引数名を作成します。たとえば、オブジェクトが ArrayList の先頭に挿入され、このリストが別のリストに追加される仕組みを次に示します。

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

各引数名は、「with」とその型で構成されます。やや不便ですが、Objective-C では常に Java と同じメソッドが呼び出されるようにします。

ヘッダー名

ヘッダー ファイルには名前がマッピングされていませんが、Java ソースファイルのパスの末尾は「.java」ではなく「.h」です。これにより、Xcode や Make などのサポートツールが大幅に簡素化されますが、以下の点で、最初に少し混乱する可能性があります。

#import "java/util/Date.h"

Date ではなく JavaUtilDate クラスを宣言します。

翻訳されたクラスの使用

奇数の名前(パッケージ プレフィックスで簡略化できます)を除き、翻訳されたクラスは他の Objective-C クラスと同様に使用されます。

#import "java/util/BitSet.h"
...
  JavaUtilBitSet *bitset = [[JavaUtilBitSet alloc] init];
  [bitset setWithInt:10 withBOOL:YES];
  BOOL b = [bitset getWithInt:10];