【问题标题】:Null safety and Maps空安全和地图
【发布时间】:2021-06-10 16:37:03
【问题描述】:

以下情况如何处理:

void main() {
  print(getInt('d'));
}

Map<String, int> myMap = {'a':1, 'b':2, 'c':3};

int getInt(String key) {
  if (!myMap.containsKey(key)) {
    myMap[key] = 0;
  }
  return myMap[key]!; 
}

myMap[key] 永远不会为空,但如果我删除 return myMap[key]!;!,我会收到空​​安全错误:

'int?' 类型的值无法从函数“getInt”返回,因为它的返回类型为“int”。

! 抛弃可空性是否合适,还是有更清洁的方法?

【问题讨论】:

    标签: flutter dart dart-null-safety


    【解决方案1】:

    不确定清洁器是什么意思,! 确实存在是有原因的。

    您可以将 if 语句简化为一行:

    int getInt(String key) {
      myMap[key] ??= 0;
      return myMap[key]!; 
    }
    

    【讨论】:

      【解决方案2】:

      来自docs

      如果键不存在,Map 类的 index [] 运算符返回 null。这意味着该运算符的返回类型必须可以为空。

      Map<String, int> map = {'a': 1};
      int i = map['a']; // Error
      

      解决方案:

      • 使用 ?? 并提供默认值。

        int i = map['a'] ?? 0;
        
      • 使用 Bang ! 运算符。

        int i = map['a']!;
        

      【讨论】:

        【解决方案3】:

        当您使用地图时,您无法摆脱爆炸。

        这可能是编写相同代码的更简洁的方式。

        int getInt(String key) => myMap[key] ?? 0;
        

        【讨论】:

          猜你喜欢
          • 2021-07-29
          • 2021-03-21
          • 1970-01-01
          • 2011-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多