Spec-Zone.ru › Dart 1

dart:mirrors

Свойство 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 указывает A и aField из библиотеки my.library.one в качестве целей. Это пометит класс A как рефлективную цель. Указание цели для aField не оказывает никакого эффекта, так как в my.library.one нет цели с таким именем.

Обратите внимание, что всё внутри цели также доступно для рефлексии. Таким образом, если библиотека указана как цель, все классы в этой библиотеке становятся целями для рефлексии. Аналогично, если класс является целью, все его методы и поля становятся целями для рефлексии. Как следствие, aField в приведённом выше примере также является рефлективной целью.

© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-mirrors/MirrorsUsed/targets.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API