Bob*_*bin 7 dart flutter dart-null-safety
以下代码无法以健全的 null 安全性进行编译,因为可以将 null 传递给初始化不可为 null 的字段myString的构造函数。
class MyClass {
String myString;
MyClass({@required this.myString});
}
Run Code Online (Sandbox Code Playgroud)
我希望在this.myString之后添加一个问号可以解决问题,但事实并非如此,并且会显示另一个编译错误。
默认值对我来说是没有选择的,似乎唯一的其他解决方案是这样的:
class MyClass {
late String myString;
MyClass({@required myString}) {
this.myString = myString;
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,如果有很多参数,这会降低可读性。是否有更方便的解决方案支持以此进行初始化。在命名构造函数中?
对于不可为 null 的类型,请使用required或提供默认值。您也可以使用late,但请确保在稍后使用它之前提供一个值。这就像一个爆炸运算符。
例子:
class Foo {
// All are non-nullable.
final int a;
final int b;
late final int c; // I trust you that you'll provide me a value later.
Foo({
required this.a, // <-- Mark it required
this.b = 0, // <-- or provide a default value.
});
}
Run Code Online (Sandbox Code Playgroud)
如果我的想法没有错误,如果你想要一个可以从构造函数中为空的字符串参数,你可以声明一个“字符串?” 类型。
class MyClass {
String? myString;
MyClass({required this.myString});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6850 次 |
| 最近记录: |