读取生成的源代码

类名称映射

由于 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];