dart,给定一个类的实例是否可以按升序获取它继承的所有类型的列表?

时间:2014-02-18 11:09:35

标签: dart dart-mirrors

如果我有:

List<Type> getInheritanceStructure(){
    // TODO
}

class A{
}
class B extends A{
}
class C extends B{
}

var c = new C();

List<Type> types = getInheritanceStructure(c);

types.forEach((type) => print(type));

//should print out:
C
B
A
Object

是否可以获得这样的类型列表?

1 个答案:

答案 0 :(得分:1)

你需要一个类镜像,从那里你可以浏览所有的超类。

List<Type> getInheritanceStructure(Object o){
    ClassMirror baseClass = reflectClass(o.runtimeType);
    return walkSuperclasses(baseClass);
}

List<Type> walkSuperclasses(ClassMirror cm) {
    List<Type> l = [];
    l.add(cm.reflectedType);
    if(cm.superclass != null) {
        l.addAll(walkSuperclasses(cm.superclass));
    }
    return l;
}