Как получить параметризованный тип экземпляра с помощью Dart и smoke?

Рассмотрим этот код:

class Foo {
  List<String> listOfStrings;
}

Используя пакет smoke, как я могу получить String глядя на listOfStrings ?

Я вижу, что мы можем получить Declaration из Type, но я не понимаю, как получить параметризованный тип из Декларация.

Это важно, помимо прочего, для создания библиотеки сериализации.


person Seth Ladd    schedule 18.08.2014    source источник
comment
Это невозможно. smoke не собирает такого рода данные и, таким образом, не предоставляет возможности получить эту информацию. Это возможно только через mirrors. Также вы пометили этот вопрос как dart-mirrors, но это неправильно, потому что smoke не является отражением, таким как dart:mirrors.   -  person mezoni    schedule 19.08.2014


Ответы (1)


В настоящее время это невозможно сделать в дыму.

Возможно, это даже невозможно сделать напрямую с зеркальным API. Например:

import 'dart:mirrors';
class B<T> {}
class A {
  static B<int> b = new B<int>();
}
main() {
  var x = reflectType(A);
  print(x);
  print(x.declarations[#b].type);
}

напечатает B, но не B<int>.

person Siggi Cherem    schedule 19.08.2014
comment
Это возможно с dart:mirrors. Вы должны проверить свои знания. print((x.declarations[#b] as VariableMirror).type.typeArguments); - person mezoni; 19.08.2014
comment
Спасибо, что подтвердили, что сегодня это невозможно без дыма. Мы открыли code.google.com/p/dart/issues/ detail?id=20584 тем временем. - person Seth Ladd; 20.08.2014