我正在學習factory method飛鏢。但是我遇到了一個問題,它說
'Person?' 型別的值 不能從回傳型別為“Person”的函式回傳,因為“Person?” 可以為空,而 'Person' 不是。3-1.dart:13
這是我的代碼:
void main(List<String> args) {
Person a = new Person("zarkli");
a.say("hello");
}
class Person{
final name;
static final Map<String, Person> _cache = new Map<String,Person>();
factory Person(String name){
if (_cache.containsKey(name)){
return _cache[name]; // error
} else {
final person = new Person.newPerson(name);
_cache[name] = person;
return person;
}
}
Person.newPerson(this.name);
void say(String content){
print("$name: $content");
}
}
uj5u.com熱心網友回復:
一些地圖允許 null 作為值。對于這些映射,使用此運算子的查找無法區分不在映射中的鍵和存在空值的鍵。
這來自地圖的 get 操作員檔案。當您使用containsKey它時,可能會出現鍵存在但其值為空的情況。您可以使用區域變數來存盤_cache[name]并檢查它是否為空。然后 Dart 可以提升該區域變數并且不會給您任何錯誤。所以你的工廠看起來像這樣:
factory Person(String name) {
final cached = _cache[name];
if (cached != null) {
return cached;
} else {
final person = Person.newPerson(name);
_cache[name] = person;
return person;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/408826.html
標籤:
