我正在使用镜像,并想确定一个ClassMirror是否是另一个ClassMirror的子类型。类似的东西:
ClassMirror type = me.getField(someSymbol).type;
// obviously this won't work, since a ClassMirror is not a List
if(type.originalDeclaration is List) {
...
}
我真的在寻找像Java的Class.isAssignableFrom(Class)这样的东西,即第一个isa运算符。沿着类型层次结构走自己感觉有点笨拙,特别是在存在mixins的情况下,并且(希望)比dart运行时/编译器可以提供的速度慢。有没有内置的方法来做到这一点?
答案 0 :(得分:3)
TypeMirror.isSubtypeOf(),TypeMirror.isAssignableTo(),ClassMirror.isSubclassOf()。 (截至编写时,这是开发频道,它们应出现在下一个Dart稳定版本中。)
答案 1 :(得分:1)
使用您的示例,检查类型将如下所示。
ClassMirror type = me.getField(someSymbol).type;
// you could also use type.qualifiedName (dart.core.List)
if (type.originalDeclaration.simpleName == #List) {
...
}
但你仍然需要走向类型层次结构。
修复此错误https://code.google.com/p/dart/issues/detail?id=12607后,您可以这样做(如果您没有编译为javascript,它确实已经有效https://code.google.com/p/dart/issues/detail?id=6433):
ClassMirror type = me.getField(someSymbol).type;
if (type.reflectedType == List) {
...
}