Dart 如何快速测试TypeMirror是否是其他类型的子类型

Dart 如何快速测试TypeMirror是否是其他类型的子类型,dart,dart-mirrors,Dart,Dart Mirrors,我正在使用镜像,并想确定一个类镜像是否是另一个类镜像的子类型。有点像: ClassMirror type=me.getField(someSymbol).type; //显然这是行不通的,因为类镜像不是列表 if(type.originaldecaration为列表){ ... } 实际上,我正在寻找类似Java的Class.isAssignableFrom(Class)的东西,即一阶isa运算符。我自己在类型层次结构上走起来感觉有点笨拙,尤其是在存在混合的情况下,并且(希望)比dart运行时

我正在使用镜像,并想确定一个类镜像是否是另一个类镜像的子类型。有点像:

ClassMirror type=me.getField(someSymbol).type;
//显然这是行不通的,因为类镜像不是列表
if(type.originaldecaration为列表){
...
}

实际上,我正在寻找类似Java的Class.isAssignableFrom(Class)的东西,即一阶isa运算符。我自己在类型层次结构上走起来感觉有点笨拙,尤其是在存在混合的情况下,并且(希望)比dart运行时/编译器能够提供的速度要慢。是否有内置的方法来执行此操作?

使用您的示例,检查类型如下所示

ClassMirror type=me.getField(someSymbol).type;
//您还可以使用type.qualifiedName(dart.core.List)
if(type.originalDeclaration.simpleName==#List){
...
}
但是您仍然需要沿着类型层次结构走

修复此错误后,您可以这样做(如果您没有编译为javascript,它已经可以工作了):

ClassMirror type=me.getField(someSymbol).type;
if(type.reflectedType==列表){
...
}

,已添加到Dart 1.2中。(在撰写本文时,这是开发频道,它们应该出现在下一个Dart稳定版本中。)

这仍然需要搜索层次结构,这似乎是一种愚蠢的做法。我想知道为什么镜像系统不能查询类型lattice?我已经提交了一个缺陷,已经通过了分类,所以您的答案似乎是目前唯一的解决方案。FWIW您现在可以使用符号文字了!您可以简单地使用
#List
而不是
const Symbol('List')
。实现此功能只需两年多一点时间。我对可能出现的bug保持沉默。感谢你标记了格雷格,感谢Dart团队最终实现了这一点。我现在可以接受这个可以接受的答案。