類別名稱對應
由於 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 來源檔案路徑的結尾為「.h」而非「.java」。這可讓 Xcode 和 Make 等支援工具變得更加簡單,但一開始可能會有些許混淆,原因如下:
#import "java/util/Date.h"
宣告 JavaUtilDate
類別,而不是 Date
。
使用已翻譯的課程
除了奇數名稱 (可使用套件前置字串簡化) 之外,翻譯類別與其他 Objective-C 類別一樣使用:
#import "java/util/BitSet.h"
...
JavaUtilBitSet *bitset = [[JavaUtilBitSet alloc] init];
[bitset setWithInt:10 withBOOL:YES];
BOOL b = [bitset getWithInt:10];