我是Dart和Flutter的新手。在阅读教程时,我知道可以使用factory关键字使单例。但是之后,我得到了这段代码。
class AccountService {
static final _instance = AccountService._internal();
AccountService._internal();
static AccountService getInstance() {
return _instance;
}
}
我的问题。
getInstance()
? AccountService._internal()
的构造函数吗? static final _instance = AccountService._internal();
-什么时候被调用? 请帮我
最佳答案
Dart中的静态字段都是惰性计算的,因此,第一次访问该字段时,它们将首先获得其值。
所以:
getInstance()
时,它将返回_instance
字段的值。如果这是第一次,则将评估该字段,因此将调用AccountService._internal()
。如果是第二次,则先前访问的值将被重用。 _instance
引用的对象。 _instance
时被称为。由于此名称也以“_”开头,因此只能从该类所属的库中使用。 Dart规范中使用以下理由描述了静态字段的延迟初始化:
Static variable declarations with an initializing expression are initializedlazily (8.1).
The lazy semantics are given because we do not want a language where one tends to define expensive initialization computations, causing long application startup times. This is especially crucial for Dart, which must support the coding of client applications.
https://dart.dev/guides/language/specifications/DartLangSpec-v2.2.pdf
添加了代码示例
class AccountService {
static final _instance = AccountService._internal();
AccountService._internal() {
print(':: Calling AccountService._internal constructor');
}
static AccountService getInstance() {
print(':: Calling getInstance()');
return _instance;
}
}
void main() {
print(':: Step 1');
AccountService.getInstance();
print(':: Step 2');
AccountService.getInstance();
print(':: End');
}
输出:
:: Start
:: Step 1
:: Calling getInstance()
:: Calling AccountService._internal constructor
:: Step 2
:: Calling getInstance()
:: End
关于dart - Singleton在Dart中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62358679/