luc*_*shl 7 reflection inheritance dart dart-mirrors
我在飞镖中有三个课程:
class A {}
class B extends A{}
class C extends A{}
Run Code Online (Sandbox Code Playgroud)
有一种方法可以从A获取所有子类吗?
编辑:
感谢Alexandre Ardhuin您的解决方案完美无缺!
我正在学习飞镖我编辑了你的代码并提出了递归解决方案,看看:
import 'dart:mirrors';
class A {}
class B extends A{}
class C extends A{}
class D {}
class E extends C {}
bool isParent(String parent,ClassMirror clazz){
var objectParentName = MirrorSystem.getName(clazz.superclass.simpleName);
if (objectParentName == "Object"){
return parent == "Object";
}
var result = parent == objectParentName;
if (!result){
return isParent(parent,clazz.superclass);
}
return result;
}
List<String> findAllSubclasses(String clazz){
var result = [];
final ms = currentMirrorSystem();
ms.isolate.rootLibrary.classes.forEach((s,c) {
if (isParent(clazz,c)){
result.add(MirrorSystem.getName(c.simpleName));
}
});
return result;
}
main(){
var result = findAllSubclasses('A');
print(result);
}
Run Code Online (Sandbox Code Playgroud)
镜像库可以提供一些信息:
import 'dart:mirrors';
class A {}
class B extends A{}
class C extends A{}
class D {}
main(){
final ms = currentMirrorSystem();
ms.isolate.rootLibrary.classes.forEach((s,c) {
final parentClassName = MirrorSystem.getName(c.superclass.simpleName);
if (parentClassName == 'A') {
final className = MirrorSystem.getName(c.simpleName);
print('$className has A as super class');
}
});
}
Run Code Online (Sandbox Code Playgroud)
输出将是:
C has A as super class
B has A as super class
Run Code Online (Sandbox Code Playgroud)