为什么在null安全的dart中使用'var'声明的变量为null?

问题描述

我正在从docs

复制此文件
// In null-safe Dart,none of these can ever be null.
var i = 42; // Inferred to be an int.
String name = getFileName();
final b = Foo();

但是我正在null-safe dartpad中运行以下代码,并且可以编译。

void main() {
  var x = null;
  print(x);
}

这是文档错误还是我遗漏了一些东西?

解决方法

您的示例与文档试图解释的内容不太接近。尝试以下方法:

void main() {
  var x = 42;
  x = null; // Error: A value of type 'Null' can't be assigned to a variable of type 'int' - line 3
  print(x);
}

原因是var x = 42是“推断为int”而不是int?

在您的示例中,发生的事情是var x = null被解析,因此x被视为类型dynamic,因为Dart不知道您要使用哪种类型。由于dynamic的值可以为null,因此您可以使用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...