【问题标题】:How to create a static extension method in Dart?如何在 Dart 中创建静态扩展方法?
【发布时间】:2020-05-13 18:40:25
【问题描述】:

我正在尝试在我的一个类上创建一个 static extension method(它是自动生成的,所以我不能轻易修改它)。根据文档,这应该是可能的:

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

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

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

void main() {
  print(String.foo());
}
Error: Method not found: 'String.foo'.
  print(String.foo());
               ^^^

我做错了什么?

【问题讨论】:

    标签: dart


    【解决方案1】:

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

    您目前无法创建static 的扩展方法。见https://github.com/dart-lang/language/issues/723

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

    【讨论】:

    • 谢谢,一个规范的答案!由于这种“静态扩展方法”以及与扩展方法相结合的“静态”类型,我很难搜索,这一定淹没了我正在寻找的结果。
    【解决方案2】:

    正如 James 所说,从今天开始,您不能直接在扩展类上使用静态方法,您的问题的当前解决方案是:

    extension Foo on String {
      String foo() => 'foo!';
    }
    
    void main() {
      print('Hi'.foo());
    }
    

    【讨论】:

    • 我的实际课程是抽象的。
    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2015-03-28
    相关资源
    最近更新 更多