Haxe编译器为注解的类或者通过 :rtti 元数据注解的扩展的类生成运行时类型信息(RTTI)。这个信息被存储为一个 XML 字符串到一个字段 __rtti,并可以通过 haxe.rttiXmlParser 进行处理。结果的结构被描述为 RTTI 结构(第8.5.1节)。
从 Haxe 3.2.0 以后: 类型 haxe.rtti.Rtti 已经被引入,来简化RTTI相关的工作 。检索这个信息现在非常简单:
@:rtti
class Main {
var x:String;
static function main() {
var rtti = haxe.rtti.Rtti.getRtti(Main);
trace(rtti);
}
}
一般类型信息:
- path: path 类型(第3.7节)的类型路径
- module:包含这个类型的模块(第3.7节)的类型路径
- file: 包含这个类型的 .hx 文件的完整的斜线路径。在没有这个文件的时候可以为 null,例如,如果这个类型通过一个宏(第9章)来定义。
- params: 一个字符串类型的数组,表示这个类型的类型参数(第3.2节)的名称。自Haxe 3.2.0起,这不包括约束(第3.2.1节)。
- doc: 类型的文档。这个信息只有编译器标记(第6.1节) -D use_rtti_doc 被涉及的时候才可用。否则,或者如果类型没有文档,值为 null 。
- isPrivate: 是否类型为 私有(第3.7.1节)。
- platforms: 一个字符串列表,表示类型可用的目标平台。
- meta: 类型被注解的元数据。
类类型信息:
- isExtern: 是否类为 外部的(第6.2节)
- isInterface: 是否类实际上是一个接口(第2.3.3节)。
- superClass: 被它的类型路径和类型参数列表定义的它的父类。
- interfaces: 被它们的类型路径和类型参数列表定义的接口列表。
- fields: 成员类字段(第4章)列表,描述为类字段信息(第8.5.1节)。
- statics: 静态类字段列表,描述为类字段信息(第8.5.1节)。
- tdynamic: 如果没有这样的类型存在则为被通过类或者null动态实现(第2.7.2节)的类型。
枚举类型信息:
- isExtern: 枚举是否为外部的(第6.2节)。
- constructors: 枚举的构造函数列表。
抽象类型信息:
- to:一个包含隐式定义 to 转换(第2.8.1节)的数组。
- from: 一个包含隐式定义 from 转换(第2.8.1节)的数组。
- impl: 实现类的类型信息(第8.5.1节)。
- athis: 抽象类型的潜在类型(第2.8节)。
类字段信息:
- name: 字段名。
- type: 字段类型。
- isPublic: 字段是否为 public(第4.4.1节)类型。
- isOverride: 字段是否重载(第4.4.4节)另一个字段。
- doc: 字段的文档。这个信息只在如果编译器标记(第6.1节) -D use_rtti_doc 被涉及的时候可用。否则,或者如果字段没有文档,值为 null 。
- get: 字段的读取访问行为(第4.2节)。
- set: 字段的写入访问行为(第4.2节)。
- params: 一个字符串数组,表示字段拥有的类型参数(第3.2节)的名称。 从Haxe 3.2.0 起,这不包括约束(第3.2.1节)。
- platforms: 一个字符串列表表示字段可用的目标平台。
- meta: 字段被注解用的元数据。
- line: 字段定义的行号。这个信息只有字段有一个表达式的时候可用。否则值为null。
- overloads: 字段可用的重载列表,或者如果没有存在的重载则为 null 。
枚举构造函数信息: name: 构造函数的名称。 args: 构造函数的参数列表,如果没有可用参数则为null。 doc: 构造函数的文档。这个嘻嘻只有如果编译器标记(第6.1节) -D use_rtti_doc 被涉及的时候才可用。否则,或者如果构造函数没有文档,值为null。 platforms: 一个字符串列表,表示构造函数可用的目标平台。 meta: 构造函数被注解的元数据。