gpt4 book ai didi

dart - 什么时候应该在 dart 中使用 final 字段、工厂构造函数或带有 getter 的私有(private)字段?

转载 作者:行者123 更新时间:2023-12-03 03:08:16 31 4
gpt4 key购买 nike

如果你能弄清楚如何重命名这个问题,我愿意接受建议。

在 Dart 语言中,可以编写一个带有 final 字段的类。这些是只能设置的字段构造函数前 body 跑。这可以在声明中(通常用于类中的静态常量),在声明构造函数或使用 this.field 时的初始化列表语法中。速记:

class NumBox{
final num value;
NumBox(this.value);
}

假设我实际上需要对实例创建进行一些处理,并且不能只在构造函数之前初始化字段。我可以切换到使用带有 getter 的私有(private)非最终字段:
class NumBox{
num _value;
NumBox(num v) {
_value = someComplexOperation(v);
}
num get value => _value;
}

或者我可以使用工厂构造函数获得类似的行为:
class NumBox{
final num value;
factory NumBox(num v) {
return new NumBox._internal(someComplexOperation(v));
};
NumBox._internal(this.value);
}

几年前我尝试学习 Dart 时遇到了类似的问题,现在我有更多的包袱,我仍然不知道。 更聪明的方法是什么?

最佳答案

工厂构造函数是一种好方法,它允许不受限制地预先计算任何值,然后传递给普通构造函数以转发到最终字段。

另一种方法是初始化列表,它在构造函数主体之前执行,因此允许初始化最终字段:

class NumBox{
final num value;
NumBox(num v) : value = someComplexOperation(v)
}

在初始化列表中你不能阅读 this因为该实例尚未完全初始化。

DartPad example

关于dart - 什么时候应该在 dart 中使用 final 字段、工厂构造函数或带有 getter 的私有(private)字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45804992/

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