在 Dart 中,立即赋值与在 Java 中的构造函数中是否有区别?
class Example {
int x = 3;
}
Run Code Online (Sandbox Code Playgroud)
对比
class Example {
int x;
Example() {
x = 3;
}
}
Run Code Online (Sandbox Code Playgroud)
我问是因为当我使用 Flutter 并尝试将一个使用 setState 的函数分配给一个变量时,前一种方法是不可能的,但后一种方法是可能的。
jam*_*lin 12
在你的微不足道的情况下,没关系。
通常,您可以通过以下几种方式初始化实例变量:
class Example1 {
T x = value;
}
Run Code Online (Sandbox Code Playgroud)
好处:
final或不可为空的成员。缺点:
this因为初始化发生在this变得有效之前(即不能依赖其他实例成员)。(一个例外是,如果成员是通过声明延迟初始化的late。这需要启用空安全功能。)class Example2 {
T x;
Example2() : x = value;
}
Run Code Online (Sandbox Code Playgroud)
好处:
final或不可为空的成员。缺点:
this因为初始化发生在this变得有效之前(即不能依赖其他实例成员)。class Example3 {
T x;
Example3() {
x = value;
}
}
Run Code Online (Sandbox Code Playgroud)
好处:
this(即可以使用其他实例成员)。缺点:
final或不可为空的成员。我可能忘记了一些要点,但我认为这应该涵盖主要内容。
首先发生直接的内联初始化,然后是初始化列表,然后是构造函数体。另请参阅分配参数列表和初始化列表中的值之间的差异,这解释了为什么this仅在对象初始化的后期阶段才有效。
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |