作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将参数传递给单例,并根据传递的参数定义类成员。
这是我正在使用的代码实际上不起作用:
class MyService {
static final MyService _singleton = ImapService._internal();
String level;
MyClass _client;
factory MyService({level = 'HIGH'}) {
_singleton.level = level;
return _singleton;
}
MyService._internal() {
if (level == 'LOW') {
_client = new Class1();
} else {
_client = new Class2();
}
}
}
问题在于,
MyService._internal()
函数始终在
factory
之前调用,因此
level
变量在该函数中始终为null,而我的代码从不在
If
语句中进行。
最佳答案
您想要具有可变状态的单例。那有点合理。
如果在实例上使用状态,则需要有效的初始值。
就像是:
class MyService {
static final MyService _singleton = MyService._internal();
String _level;
MyClass _clientCache;
String get level => level;
set level(String level) {
if (_level != level) {
_level = level;
_clientCache = level == "LOW" ? Class1() : Class2();
}
}
factory MyService({String level = "HIGH"}) => _singleton..level = level;
MyService._internal() : _level = "HIGH", _clientCache = Class1();
}
然后,您也可以将该状态存储在全局变量中。这将允许您懒惰地初始化
_class
getter。
class MyService {
static final MyService _singleton = const MyService._internal();
static String _level = "HIGH";
static MyClass _clientCache = _classFromLevel(_level);
String get level => _level;
void set level(String level) {
if (_level != level) {
_level = level;
_clientCache = _classFromLevel(level);
}
}
MyClass _client => _clientCache;
factory MyService({level = 'HIGH'}) => _instance..level = level;
const MyService._internal();
static MyClass _classFromLevel(String level) =>
level == "LOW" ? Class1() : Class2();
}
(请考虑您是否真的需要单例。可变的单例对象只是带有所有这些固有问题的荣耀的全局变量。)
关于dart - 将参数传递给单例并基于该参数定义成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63245067/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!