You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart空安全报错:int?无法赋值给num类型参数,如何修复?

适配Dart空安全:解决int?无法赋值给num的问题

这个报错的核心原因是:Dart空安全启用后,int?是可空整数类型,而num是非空数值类型,可空类型不能直接赋值给非空类型——这是空安全机制强制的类型检查,用来避免潜在的空指针异常。

以下是几种实用的修复方案,你可以根据业务场景选择:

  • 先做空检查再赋值
    先判断可空变量是否为null,在确认非空的代码块里使用变量,Dart会自动推断它的非空类型:

    int? nullableInt = 5;
    num targetNum;
    
    if (nullableInt != null) {
      targetNum = nullableInt; // 此时nullableInt被推断为非空int,可直接赋值给num
    } else {
      // 根据业务需求处理null情况,比如给默认值
      targetNum = 0;
    }
    
  • 用空断言运算符!(谨慎使用)
    如果你能100%确定这个可空变量不会为null,可以用!强制转为非空类型。注意:如果变量实际为null,运行时会抛出异常:

    int? nullableInt = 10;
    num targetNum = nullableInt!; // 断言变量非空,直接赋值
    
  • 用空合并运算符??设置默认值
    一行代码搞定null处理,当变量为null时自动使用指定的默认值:

    int? nullableInt;
    num targetNum = nullableInt ?? 0; // nullableInt为null时,用0赋值
    
  • 从根源优化:声明非空变量
    如果这个变量从业务逻辑上就不应该为null,直接把类型声明为非空的int,彻底避免可空类型问题:

    int nonNullInt = 15; // 直接声明为非空int
    num targetNum = nonNullInt; // 无类型冲突,直接赋值
    

内容的提问来源于stack exchange,提问作者Guru PJOK-mu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:35:20