当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Dart MirrorsUsed.targets用法及代码示例

dart:mirrors 库中MirrorsUsed.targets 属性的用法介绍如下。

用法:

dynamic
          targets
final

反射目标列表。

结合 metaTargets ,这提供了应用此元数据的库所使用的反射目标的完整列表。

以下文本是非规范性的:

目前,还没有关于反射目标是什么的正式说明。非正式地,目标是库、类、方法或字段。

Dart2js 目前支持以下格式来指定目标:

  • 一个常量 List 包含 String 常量,表示目标和 Dart 类型的(限定)名称。
  • 单个 String 常量,其值为逗号分隔的(限定)名称列表。
  • 单个 Dart 类型。

(限定)名称解析为目标,如下所示:

  1. 如果限定名称与库名称匹配,则匹配的库就是目标。
  2. 否则,查找名称的最长前缀,使前缀刚好在 . 之前结束并且是库名称。
  3. 将该库用作当前范围。如果未找到匹配的前缀,请使用当前库,即放置 MirrorsUsed 注释的库。
  4. 使用 . 作为分隔符将剩余的后缀(如果在步骤 3 中未找到库名称,则为整个名称)拆分为 String 列表。
  5. 从列表中选择名称与 String 匹配的当前范围内的所有目标。

例如:

library my.library.one;

class A {
  var aField;
}

library main;

@MirrorsUsed(targets: "my.library.one.A.aField")
import "dart:mirrors";

MirrorsUsed 注释将库 my.library.one 中的 AaField 指定为目标。这会将类A 标记为反射目标。 aField 的目标规范无效,因为在my.library.one 中没有具有该名称的目标。

请注意,目标中的所有内容也可用于反射。因此,如果将库指定为目标,则该库中的所有类都将成为反射的目标。同样,如果一个类是一个目标,它的所有方法和字段都将成为反射的目标。因此,上例中的aField 也是反射目标。

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 targets property。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。