Я играю с зеркалами в Dart. Я не могу найти способ отразить класс и выяснить, есть ли у него конструктор и, если да, то каковы параметры этого конструктора.
С ClassMirror похоже, что коллекция «объявлений» объектов DeclarationMirror будет включать запись для конструктора, но с DeclarationMirror нет способа определить, является ли он конструктором, и нет возможности увидеть информацию о параметрах.
С коллекцией объектов MethodMirror "instanceMembers" похоже, что конструкторы даже не включены. Я предполагаю, что это связано с тем, что конструктор не является обычным методом, который можно было бы вызвать, но все же это странно, поскольку MethodMirror имеет атрибут «isConstructor».
Есть ли способ, учитывая тип объекта, выяснить, есть ли у него конструктор, и если да, то получить информацию о параметрах этого конструктора?
Код ниже иллюстрирует проблему:
import 'dart:mirrors';
class Person {
String name;
int age;
Person(this.name, this.age);
string getNameAndAge() {
return "${this.name} is ${this.age} years old";
}
}
void main() {
ClassMirror classMirror = reflectClass(Person);
// This will show me the constructor, but a DeclarationMirror doesn't tell me
// anything about the parameters.
print("+ Declarations");
classMirror.declarations.forEach((symbol, declarationMirror) {
print(MirrorSystem.getName(symbol));
});
// This doesn't show me the constructor
print("+ Members");
classMirror.instanceMembers.forEach((symbol, methodMirror) {
print(MirrorSystem.getName(symbol));
});
}