2

对于给定的示例:

class Base {
    static abstract void foo();
}

class ChildA extends Base{
    static void foo(){};
}

class ChildB extends Base{
    static void foo(){};
}

我想找到“Base”的所有子类(在每个子类上调用 foo)。我需要在构建时找到它(不需要运行时)。我唯一的想法是使用反射。但我不知道如何从 ClassMirror 访问课程?

这是我到目前为止所拥有的:

final mirror = currentMirrorSystem();
mirror.libraries.forEach((uri, libMirror) {
    libMirror.classes.forEach((name, ClassMirror classMirror) {
        try {
            while ((classMirror = classMirror.superclass) != null) {
                if (MirrorSystem.getName(classMirror.qualifiedName) == ".Base") {
                    //this is the classMirror of class i want
                    //but i have no idea how to access it 
                    //or how to call foo() on it
                    print(classMirror);
                    print(classMirror.simpleName.toString());
                }
            }

        } catch(e) {
            print(e);
        }
    });
});

如前所述,我在运行时不需要这个,所以也许一种完全不同的方法可以解决这个问题。如果没有,问题是:我如何调用 foo()?

提前致谢。

4

1 回答 1

0

对不起,也许与搜索相关的功能比搜索效果更好,或者我的研究不够努力,但无论如何我发现了这一点:

查找 dart 中的所有子类

那里的答案还建议使用镜子。因此,要回答我自己的问题,调用静态方法 foo 的方法是使用调用方法:

classMirror.invoke(#foo, []);

但这仍然可能不是最佳解决方案,也许在构建时有更好的方法来做到这一点?

于 2013-12-15T15:25:19.743 回答