2013-10-04 76 views
3

我正在使用镜像并希望确定一个ClassMirror是否是另一个类型的子类型。排序是这样的:如何快速测试TypeMirror是否是另一个子类型

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(类),即,一阶ISA运营商。在类型层次结构中,我感觉有点疯狂,特别是在mixin存在的情况下,并且(有希望)会比dart运行时/编译器提供的速度慢。有没有一个内置的方法来做到这一点?

回答

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) { 
    ... 
} 
+0

这仍然需要搜索层次结构,这似乎是一种愚蠢的做事方式。我想知道为什么镜像系统不能查询类型格吗? – mseddon

+1

我已经提交了一个缺陷,它已通过分类,https://code.google.com/p/dart/issues/detail?id=13856,所以目前看来您的答案是唯一的解决方案。 – mseddon

+0

FWIW您现在可以使用符号文字!而不是'const Symbol('List')'你可以简单地使用'#List'。 –

相关问题