Использование отражения для проверки коллекций внутри класса

У меня есть код, который выглядит так:

Zoo myZoo;

class Zoo {
  Park<Duck> ducks;
  Park<Lama> lamas;
}

class Park<E extends Animal> {
  ...
}

Мне нужно узнать из ClassMirror of Zoo, сколько существует парков и какие подтипы животных они содержат. На самом деле в этом примере мне нужно получить Duck и Lama TypeMirrors.

До сих пор мне удавалось распечатать это, анализируя строки, но мне не удалось получить типы.


person Florian d'Erfurth    schedule 29.12.2014    source источник


Ответы (1)


Ваш вопрос мне не совсем ясен, но я думаю, это то, что вы ищете

void main() {
  ClassMirror cm = reflectClass(Zoo);
  cm.declarations.forEach((k, v) {
    if(v is VariableMirror) {
      if ((v as VariableMirror).type.typeArguments.where((t) => t.isSubtypeOf(reflectType(Animal))).length > 0) {
        print('$k, $v');
      }
    }
  });
}
person Günter Zöchbauer    schedule 29.12.2014
comment
Круто, ты спас мой день! Я не знал о ClassMirror typeArguments, это то, что я искал. Спасибо :) - person Florian d'Erfurth; 29.12.2014