如何在 Dart 中创建静态扩展方法?

Tho*_*mas 5 dart

我正在尝试在我的一个类上创建一个静态 扩展方法(它是自动生成的,所以我无法轻松修改它)。根据文档,这应该是可能的:

扩展还可以具有静态字段和静态辅助方法。

然而,即使这个小例子也无法编译:

extension Foo on String {
  static String foo() => 'foo!';
}

void main() {
  print(String.foo());
}
Run Code Online (Sandbox Code Playgroud)
Error: Method not found: 'String.foo'.
  print(String.foo());
               ^^^
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

jam*_*lin 8

文档意味着扩展类本身可以具有static字段和辅助方法。这些不会是扩展类的扩展。也就是说,在您的示例中,Foo.foo()合法但String.foo()不合法。

您当前无法创建static. 请参阅https://github.com/dart-lang/language/issues/723

请注意,您还可能会看到 Dart 扩展方法被称为“静态扩展方法”,但“静态”意味着扩展是静态应用的(即,基于编译时已知的对象类型,而不是其运行时类型)。