刚刚开始使用Dart。DartPad说我的代码不是空安全的,但我没有看到一种方法来初始化一个Point"没有给x和y赋值,所以它应该是空安全的,不是吗?
void main(){
Point p = new Point(1.0,2.0);
print(p.x);
}
class Point {
double x;
double y;
Point(double x, double y) {
this.x = x;
this.y = y;
}
}
奇怪的是,如果我使用"语法糖",它就会起作用。但这难道不意味着"普通的方式"吗?还应该工作吗?
void main(){
Point p = new Point(1.0,2.0);
print(p.x);
}
class Point {
double x;
double y;
Point(this.x, this.y) {}
}
我在这里错过了什么?
正如理解空安全中所说,您应该在之前初始化非空字段构造函数的身体。
乌利希期刊指南:"共同way"在这种情况下是这样的,使用预构造函数:
class Point {
double x;
double y;
Point(double x, double y) :
this.x = x,
this.y = y;
}
常用方法
;将无法工作,因为Dart无法确保您将为变量提供非空值。但是,您可以使用late
关键字告诉Dart您将这样做。
class Point {
late double x;
late double y;
Point(double x, double y) {
this.x = x;
this.y = y;
}
}
如果您不想使用late
关键字,也可以将x
和y
标记为可空:
class Point {
double? x;
double? y;
Point(double x, double y) {
this.x = x;
this.y = y;
}
}
在某些情况下,可以通过添加?成变量
class Point {
double? x;
double? y;
Point(double x, double y) {
this.x = x;
this.y = y;
}
}