如何快速测试TypeMirror是否是另一个的子类型

时间:2013-10-04 17:20:58

标签: dart dart-mirrors

我正在使用镜像,并想确定一个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运行时/编译器可以提供的速度慢。有没有内置的方法来做到这一点?

2 个答案:

答案 0 :(得分:3)

在Dart 1.2中添加了

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