3

私はミラーを使用しており、ある 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 演算子を探しています。特にミックスインが存在する場合、型階層を上っていくのは少しぎこちなく感じます。(うまくいけば) dart ランタイム/コンパイラが提供できるものよりも遅くなるでしょう。これを行う組み込みの方法はありますか?

4

2 に答える 2

3

TypeMirror.isSubtypeOf()TypeMirror.isAssignableTo()ClassMirror.isSubclassOf()が Dart 1.2 で追加されました。(これを書いている時点では、これは dev チャンネルです。これらは、次の 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 に答える