クラス名のマッピング
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];