當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。