构造函数不满足 Dart 中的空安全性



刚刚开始使用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关键字,也可以将xy标记为可空:

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;
}
}

最新更新