Dart 3.1.4中传入Null给bool参数无编译警告是否为设计意图?
Dart 3.1.4中Null传入非空参数无编译警告的原因
这种情况分两种场景来看:
1. 非Sound空安全模式下:有意为之
如果你的项目禁用了Sound空安全(比如通过--no-sound-null-safety参数,或pubspec.yaml中SDK版本配置未明确要求Sound空安全),编译器不报错、运行时抛出类型错误是有意的设计。
背后的动机是兼容历史代码:在Dart 2.12引入空安全之前,null可以被赋值给任意类型,编译器不会做严格的静态类型检查,而是将类型校验延迟到运行时。为了让大量旧代码无需大规模修改就能在新版本Dart中运行,官方保留了这种宽松的检查逻辑,牺牲部分静态类型安全性来换取兼容性。
2. Sound空安全模式下:异常情况
Dart 3.x默认启用Sound空安全模式,在这种模式下,你的代码应该会触发编译错误,提示The argument type 'Null' can't be assigned to the parameter type 'bool'。如果你的环境没有给出任何警告,大概率是项目的空安全配置存在问题,导致实际运行在非Sound模式下。
内容的提问来源于stack exchange,提问作者TSR
相关产品推荐
相关产品推荐

