dart - 必须初始化不可为空的实例字段
问题描述
class Foo {
int count; // Error
void bar() => count = 0;
}
为什么我已经在bar
方法中初始化它时看到错误?count
如果被标记,我可以理解这个错误final
。
解决方案
(您的代码在 Dart 2.12 之前很好,空安全)
使用 null 安全性,Dart 无法知道您是否实际将变量分配给count
. Dart 可以通过三种方式查看初始化:
申报时:
int count = 0;
在初始化形式中:
Foo(this.count);
在初始化列表中:
Foo() : count = 0;
因此,根据 Dart 的说法,count
从未在您的代码中初始化,因此会出现错误。解决方案是用上面显示的 3 种方式初始化它,或者只使用late
关键字告诉 Dart 你将在使用它之前在其他点初始化变量。
使用
late
关键字:class Foo { late int count; // No error void bar() => count = 0; }
使变量可以为空:
class Foo { int? count; // No error void bar() => count = 0; }
推荐阅读
- svg - 将渐变应用于填充路径的 svg 形状
- php - MySQL $row 选择了如何只显示列的前 n 个字符
- visual-studio-code - 如何在 VSCode 中从 Python Interactive 调试 python 模块?
- c++ - 错误:重新定义类,尽管使用了包含守卫
- javascript - 控制台显示意外标识符错误并且代码不运行
- html - 伪元素覆盖主类
- java - 无法在服务中使用 findViewById,使用了 LayoutInflater 但没有帮助,没有显示值
- postgresql - 将 '0' 转换为双精度,然后乘以 -1 将导致负零
- android - Firebase Crashlytics - java.lang.IllegalStateException:缺少 Crashlytics 构建 ID
- swiftui - SwiftUI 中的系统 UIBarButtonItem