Spec-Zone.ru › Dart 2

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 в приведенном выше примере также является рефлексивной целью.

Реализация

final targets;

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-mirrors/MirrorsUsed/targets.html

Spec-Zone.ru

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