我有一个类(比如说一个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后,我想知道在这种情况下的最佳实践是什么。
2条答案
按热度按时间alen0pnh1#
一般来说,使用对你的API概念上最有意义的东西。选择使用
static
会影响你的API,因为与其他语言不同,Dart不提供语法糖来允许static
方法作为示例方法调用。(也就是说,你必须像SomeClass.someStaticMethod()
一样调用static
方法,而不能调用SomeClass().someStaticMethod()
。另一个需要考虑的问题是,您是否希望您的方法可能被派生类覆盖。
static
方法不涉及多态性。这两种方法都不适用于您的方法是私有的,因此不需要考虑公共API,也不会被覆盖,在这种情况下,我将使用
static
方法,因为它的调用效率更高;“static
“意味着它在编译时是可解析的,并且不涉及任何运行时虚拟分派。3z6pesqy2#
方法没有字段那么重要。
静态方法更适合使用,而且它们也可以从其他类调用,而不需要创建示例(访问示例方法)。它们也可以不费多大力气地原样复制到其他类中。
缺点是静态方法不能访问示例字段或方法。
字段则是另一回事,因为静态字段在程序的生命周期内存在,所以应该小心使用它们。