在Java中,您可以这样做:
class A {
private final int x;
public A() {
x = 5;
}
}
在达特,我试过:
class A {
final int x;
A() {
this.x = 5;
}
}
我收到两个编译错误:
必须初始化最终变量'x'。
和
'x'不能用作定位器,因为它的最终版本。
有没有办法在Dart的构造函数中设置最终属性?
您无法在构造函数体中实例化最终字段。有一个特殊的语法:
class Point {
final num x;
final num y;
final num distanceFromOrigin;
// Old syntax
// Point(x, y): x = x, y = y, distanceFromOrigin = sqrt(pow(x, 2) + pow(y, 2));
// New syntax
Point(this.x, this.y) : distanceFromOrigin = sqrt(pow(x, 2) + pow(y, 2));
}
您可以使用构造函数中的this.
语法使其更短(在https://www.dartlang.org/guides/language/language-tour#constructors中描述):
class Point {
final num x;
final num y;
final num distanceFromOrigin;
Point(this.x, this.y)
: distanceFromOrigin = sqrt(pow(x, 2) + pow(y, 2));
}
如果你有一些更复杂的初始化,你应该使用工厂构造函数,代码变为:
class Point {
final num x;
final num y;
final num distanceFromOrigin;
Point._(this.x, this.y, this.distanceFromOrigin);
factory Point(num x, num y) {
num distance = distanceFromOrigin = sqrt(pow(x, 2) + pow(y, 2));
return new Point._(x, y, distance);
}
}