我是Dart和Flutter的新手。当我学习教程时,我了解到我们可以使用工厂关键字制作单例。但在那之后,我得到了这个代码。
class AccountService {
static final _instance = AccountService._internal();
AccountService._internal();
static AccountService getInstance() {
return _instance;
}
}
我的问题。
AccountService_internal()
是构造函数吗
静态final_instance=AccountService_内部()
-何时调用
请帮助我
Dart中的静态字段都是延迟计算的,因此在您第一次访问字段时,它们将首先获得其值。
因此:
>
当调用<code>getInstance()的值。如果这是第一次评估该字段,请使用AccountService_调用internal()
。如果是第二次访问,则重用以前访问的值。
第一次在代码中调用这个方法。如果从不调用该方法,则不会创建< code>_instance引用的对象。
是的,它是一个命名的构造函数,因为名称以“_”开头,所以只能从该类所属的库中获得。通过这样做,可以限制该类中的新对象,从而仅允许类本身创建实例。
第一次访问_instance
时调用它。由于该名称也以“_”开头,因此只能从该类所属的库中使用。
静态字段的延迟初始化在Dart规范中进行了描述,其推理如下:
带有初始化表达式的静态变量声明是惰性初始化的(8.1)。
之所以给出惰性语义,是因为我们不想要一种倾向于定义昂贵的初始化计算的语言,从而导致应用程序启动时间过长。这对于 Dart 尤其重要,Dart 必须支持客户端应用程序的编码。
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
这可能是一个反复出现的问题,但我发现了相互矛盾的答案,现在我不知道哪一个是正确的。我以为我理解了这个概念,然后我开始阅读所有这些答案,我完全困惑了,所以我在寻找一个明确而简单的答案来回答我的问题,我很容易理解。 根据这个答案和这篇文章,应该中断代码执行,实际上等待未来完成,然后继续按顺序执行其余代码。它还表明这可能会阻塞主线程,这在这种情况下是合乎逻辑的。 另一方面,来自flutter团队的这个、
我有服务器套接字,当我用java访问它时,设置socket.setsolinger(true,0);is工作得很好。我试图用dart实现java客户机代码,但我一直得到一个错误。此外,获取错误也需要时间。飞镖应该是快的! 在java中,我将套接字打开为socketOut=new DataOutPutStream(socket.getOutputStream());和socketIn=new Dat
我是斯威夫特编程新手,请告诉我如何用代码在斯威夫特实现单例类。 在obj-c中我知道 斯威夫特怎么样
单例模式确保只创建一个类的实例。我如何在飞镖中建立这个?
因此,Dart API对==运算符这样说: 相等运算符。 所有对象的默认行为是,当且仅当此对象和其他对象是同一对象时,才返回true。 重写此方法以在类上指定不同的相等关系。重写方法仍然必须是等价关系。也就是说,它必须是: Total:它必须为所有参数返回一个布尔值。它不应该扔。 反身:对于所有对象 必须为。 对称:对于所有对象< code>o1和< code > O2 ,< code > O1
为什么会有这个类 平常我们使用单例不外乎两种方式: 在对象里加个静态方法getInstance()来获取。此方式可以参考 【转】线程安全的单例模式 这篇博客,可分为饿汉和饱汉模式。 通过Spring这类容器统一管理对象,用的时候去对象池中拿。Spring也可以通过配置决定懒汉或者饿汉模式 说实话我更倾向于第二种,但是Spring更注重的是注入,而不是拿,于是我想做Singleton这个类,维护一个