flutter 在可能的情况下将方法标记为静态是否更好?

bvjxkvbb  于 2023-02-25  发布在  Flutter
关注(0)|答案(2)|浏览(145)

我有一个类(比如说一个Flutter无状态小部件),其中有一个helper方法:

class MyWidget extends StatelessWidget {
  const MyWidget();

  // static?
  Foo _helper() {
    // ... Other instructions that don't need `this`.
    // Ex:
    final now = DateTime.now();
    // ...
  }

  @override
  Widget build(BuildContext context) {
    final foo = _helper();
    // ...
  }
}

这个方法可以是static,因为它不需要访问示例。它可以作为静态方法工作,也可以作为非静态方法工作。看过this question后,我想知道在这种情况下的最佳实践是什么。

alen0pnh

alen0pnh1#

一般来说,使用对你的API概念上最有意义的东西。选择使用static会影响你的API,因为与其他语言不同,Dart不提供语法糖来允许static方法作为示例方法调用。(也就是说,你必须像SomeClass.someStaticMethod()一样调用static方法,而不能调用SomeClass().someStaticMethod()
另一个需要考虑的问题是,您是否希望您的方法可能被派生类覆盖。static方法不涉及多态性。
这两种方法都不适用于您的方法是私有的,因此不需要考虑公共API,也不会被覆盖,在这种情况下,我将使用static方法,因为它的调用效率更高;“static“意味着它在编译时是可解析的,并且不涉及任何运行时虚拟分派。

3z6pesqy

3z6pesqy2#

方法没有字段那么重要。
静态方法更适合使用,而且它们也可以从其他类调用,而不需要创建示例(访问示例方法)。它们也可以不费多大力气地原样复制到其他类中。
缺点是静态方法不能访问示例字段或方法。
字段则是另一回事,因为静态字段在程序的生命周期内存在,所以应该小心使用它们。

相关问题