如何获取抽象类中字段的默认值

Bud*_*sno 6 dart dart-mirrors

假设我有一个这样的类:

abstract class Foo {
  String name bar = 'bar';
}
Run Code Online (Sandbox Code Playgroud)

使用镜像,我们可以得到 的值bar吗?

Jus*_*ani 1

一般回答:

  • super.field如果您正在扩展一个类并想要访问其字段/获取器,则可以使用。
  • 如果您正在反思类声明,则当前无法内省任何主体,包括方法主体或初始值设定项。您必须使用分析器或 dart2js。
  • Dado 的运作方式……很有趣。它尝试实例化抽象类,但实际上不再起作用。

既然您正在查看 Dado,那么让我更多地解释一下它是如何工作的,尽管这不是这个问题的一般答案。

首先,Dado 的方法过去和现在都是相当实验性的。我试图使用语言功能来要求模块的声明性定义,以便作者无法编写不支持代码生成的模块。Dart 和镜像发生了一些变化,使得这种方法不太可行,或者至少使它需要更多的样板文件,所以我正在重新考虑整个事情。采取你在那里找到的任何技术,并增加一两点盐:)

对于没有看过示例或代码的人来说,在 Dado 中,您可以为模块定义声明一个抽象类。具有值的字段声明一个固定的单例值,类似于更传统的 DI 容器可能让您编写的方式bind(Foo).toValue(new Foo())。

我(过去)获取值的方式是通过镜像实例化抽象类,然后简单地读取该字段。dart:mirrors 更改为禁止实例化抽象类,因此这不再有效。这是不幸的,因为其他类型的绑定是用抽象方法声明的,并且这些绑定会在非抽象类中引起警告。