gpt4 book ai didi

dart - 不可为空的实例字段必须被初始化

转载 作者:行者123 更新时间:2023-12-04 00:12:55 25 4
gpt4 key购买 nike

class Foo {
int count; // Error
void bar() => count = 0;
}
为什么我已经在 bar 方法中初始化它时看到错误?如果 count 被标记为 final ,我可以理解这个错误。

最佳答案

在 null-safety 到来之前,您的代码很好。
有了空安全,Dart 无法知道您是否真的将变量分配给 count 。 Dart 可以通过三种方式看到初始化:
(1) 申报时:

int count = 0;
(2) 在初始化形式中:
Foo(this.count);
(3​​) 在初始化列表中:
Foo() : count = 0;
因此,根据 Dart 的说法, count 从未在您的代码中初始化,因此是错误的。解决方案是用上面显示的 3 种方式初始化它,或者只使用 late 关键字,它会告诉 Dart 在使用它之前你将在其他时间初始化变量。
(4) 使用late关键字:
class Foo {
late int count; // No error
void bar() => count = 0;
}

如果您认为 count 可以是 null ,请使用 int? 使其可以为空。
class Foo {
int? count; // No error
void bar() => count = 0;
}
但是,您随后必须使用 bang 运算符 (!) 来消除可空性。
int result = count!;

关于dart - 不可为空的实例字段必须被初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67034475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com