假设我有这样的课程:
abstract class Foo {
String name bar = 'bar';
}
使用镜像,我们可以得到 的值bar
吗?
一般答案:
super.field
如果您正在扩展一个类并想要访问其字段/获取器,则可以使用。既然你在看 Dado,让我来解释一下它是如何工作的,即使它不是这个问题的一般答案。
首先,使用 Dado 的方法过去和现在都是非常实验性的。我试图使用语言特性来要求模块的声明性定义,这样作者就无法编写不能用于代码生成的模块。Dart 和镜像发生了一些变化,使这种方法不太可行,或者至少使它需要更多样板,所以我正在重新考虑整个事情。采取任何你在那里找到的技术,增加一两点盐:)
对于尚未查看示例或代码的其他任何人,在 Dado 中您为模块定义声明一个抽象类。具有值的字段声明一个固定的单例值,类似于更传统的 DI 容器可能让您编写的方式bind(Foo).toValue(new Foo())
。
我(过去)获取值的方式是通过镜像实例化抽象类,然后简单地读取字段。dart:mirrors 更改为不允许实例化抽象类,因此这不再有效。这是不幸的,因为其他类型的绑定是用抽象方法声明的,而这些绑定会在非抽象类中引起警告。