Дарт, учитывая экземпляр класса, возможно ли получить список всех типов, которые он наследует в порядке возрастания?
Если у меня есть:
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 ответ
Решение
Вам нужно классное зеркало, оттуда вы можете пройти через все суперклассы.
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;
}