3

我正在使用镜像,并想确定一个 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 运算符。走上类型层次结构我自己感觉有点笨拙,尤其是在存在 mixin 的情况下,并且(希望)会比 dart 运行时/编译器可以提供的要慢。有没有内置的方法可以做到这一点?

4

2 回答 2

3

在 Dart 1.2 中添加了TypeMirror.isSubtypeOf()TypeMirror.isAssignableTo()ClassMirror.isSubclassOf() 。(在撰写本文时,这是开发频道,它们应该会出现在下一个 Dart 稳定版本中。)

于 2014-02-19T08:04:20.247 回答
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) {
    ...
}
于 2013-10-05T08:08:18.967 回答