import 'dart:mirrors';
void main() {
var mirror = reflectClass(MyClass);
mirror.declarations.forEach((k, v){
print(k);
if(v is VariableMirror){
print(v.type);
}
});
}
class MyClass{
var aDynamic;
int anInt;
}
//prints:
Symbol("aDynamic")
TypeMirror on 'dynamic'
Symbol("anInt")
ClassMirror on 'int'
Symbol("MyClass")
有没有办法可以获得TypeMirror重新提取的类型,所以我想在上面的示例中为2个属性返回dynamic
类型和int
类型?
答案 0 :(得分:4)
VariableMirror.type
是正确的方法。如果它返回ClassMirror,那么您可以使用ClassMirror.reflectedType
来获取声明的Type对象。
VariableMirror.type
将是变量的声明的类型,而不是变量保存的任何值的类型,因此虽然它是TypeMirror,但它可能不是ClassMirror。它也可以是TypeVariableMirror或TypedefMirror。您可以在输出中看到动态案例的镜像是dynamic
上的TypeMirror。所以你必须弄清楚如何处理这些。例如,没有表示dynamic
的Type对象,因此您必须单独处理它。我可能只是将其转换为Object
。对于TypedefMirrors,您可以返回Function
。我真的不确定那些不属于子类型的其他TypeMirrors。
以下是一些示例代码:
final _dynamicType = reflectType(dynamic);
Type getDeclaredType(VariableMirror m) {
var t = m.type;
if (t is ClassMirror) return t.reflectedType;
if (t is TypedefMirror) return Function;
if (t == _dynamicType) return Object;
throw new ArgumentError("I don't know how to handle ${t}");
}