空安全Dart中var声明变量可为null?文档与代码矛盾的疑问
这可不是文档错误哦,你只是没注意到Dart空安全的类型推断细节!
哈哈,别担心,文档完全没问题,你遇到的是Dart空安全里类型推断的一个典型场景:
- 文档里的例子
var i = 42;因为赋值的是非null的具体值(整数42),Dart会自动推断变量i的类型为int(非可空类型),所以它确实永远不能为null,符合空安全规则。 - 而你写的
var x = null;情况不一样:当你直接把null赋值给用var声明的变量时,Dart的类型推断会自动把x的类型判定为Object?——也就是可空的Object类型。既然是可空类型,赋值null当然是完全合法的,所以代码能正常编译运行啦。
再补充两个小细节帮你理解:
- 如果你想让变量不能为null,要么给它赋一个非null的初始值(比如
var x = 0;,会推断为int),要么明确指定非可空类型并确保初始化(比如int x = 42;)。 - 如果你就是需要一个可空变量,也可以显式声明类型,比如
int? x = null;,效果和var x = null;类似,但类型更明确。
所以本质上,文档和你的代码描述的是两种不同的变量声明场景,都符合Dart空安全的规范哦~
内容的提问来源于stack exchange,提问作者Abdou Ouahib
相关产品推荐
相关产品推荐

