读取生成的源代码

类名称映射

由于 J2ObjC 仅转换非界面 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 相同的方法。

标头名称

但是,头文件没有映射其名称,而是有以“.h”而不是“.java”结尾的 Java 源文件路径。这使得 Xcode 等支持工具变得更容易,但一开始可能会有点困惑,因为:

#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];