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

标签 dart dart-mirrors

假设我有一堂这样的课:

abstract class Foo {
  String name bar = 'bar';
}

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

最佳答案

一般答案:

  • 如果您要扩展一个类并想要访问其字段/getter,则可以使用 super.field
  • 如果您要反射(reflection)类声明,则当前无法对任何主体进行内省(introspection),包括方法主体或初始值设定项。您必须使用分析器或 dart2js。
  • Dado...其工作原理很有趣。它尝试实例化抽象类,但实际上不再起作用。

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

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

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

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

关于dart - 如何获取抽象类中字段的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21297436/

相关文章:

class - 在 Dart 中,从变量调用静态方法时出现问题

Dart,如何将用户字符串解析为功能性的 dart 代码?

flutter - Dart扩展功能仅在与调用它的文件相同时可见

firebase - 将 SearchField 添加到从 Firestore 读取的 StreamBuilder

apache - 配置Apache以避免使用Dart进行跨域调用

dart - 具有可反射lib的DartLang中的注释的simpleName

dart - 如何获取声明的注释

reflection - 反射:LibraryMirror中没有任何功能

Dart - 帮助我理解 Dart 上的这段代码是如何工作的

Flutter - 异步文件读取异常处理