【问题标题】:Get all subclasses in dart获取 dart 中的所有子类
【发布时间】:2018-01-01 21:55:32
【问题描述】:

我正在尝试在此帖子Find all subclasses in dart 之后获取给定类的所有子类,如下所示:

import 'dart:mirrors';
class A {}
class B extends A{}

List<Type> getSubclasses(Type type) {
    List<Type> subClasses = [];
    MirrorSystem mirrorSystem = currentMirrorSystem();

    // NoSuchMethodError: Class '_LocalLibraryMirror' has no instance getter 'classes'. ???
    mirrorSystem.isolate.rootLibrary.classes.forEach((s, c) {
        if (c.superclass == type) {
            subClasses.add(c);
        }
    });
    return subClasses;
}

main() {
    var result = getSubclasses(A);
    print(result);
}

但我收到以下错误:

Unhandled exception: NoSuchMethodError: Class '_LocalLibraryMirror' has no instance getter 'classes'. Receiver: Instance of '_LocalLibraryMirror' Tried calling: classes

飞镖团队可能从LibraryMirror 中删除了classes,有人知道任何替代方案吗?

我使用的是 dart 版本:1.24.3

【问题讨论】:

标签: server dart dart-mirrors


【解决方案1】:

按照 Randal 的建议,我可以使用以下代码解决我的问题:

import 'dart:mirrors';

List<ClassMirror> findSubClasses(Type type) {
    ClassMirror classMirror = reflectClass(type);

    return currentMirrorSystem()
        .libraries
        .values
        .expand((lib) => lib.declarations.values)
        .where((lib) {
            return lib is ClassMirror &&
            lib.isSubclassOf(classMirror) &&
            lib != classMirror;
        }).toList();
}

希望这可以帮助某人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-16
    • 2013-04-15
    • 2013-06-05
    • 2022-07-06
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多