最终变量无法重新分配,但对象可以在 flutter 中发生变异

Aqu*_*irl 2 dart flutter

/sf/answers/3919309621/
\n评论:

\n
\n

“初始化后无法更改”是不明确的。最终变量不能重新分配,但对象可以改变。\xe2\x80\x93\njamesdlin\n2 月 19 日 17:43

\n
\n

/sf/answers/3530176121/

\n
\n

最终变量的值无法更改。最终修改变量

\n
\n

这两种说法是什么意思?请举例说明。

\n

ישו*_*ותך 5

考虑下面的类:

class SampleObject {
  int id;
  String value;
  
  SampleObject(this.id, this.value);
}
Run Code Online (Sandbox Code Playgroud)

最终变量不能重新分配:

void main() {
  final obj1 = SampleObject(1, "value1");

  // the following line will gives error:
  // The final variable 'obj1' can only be set once
  obj1 = SampleObject(1, "value2");
}
Run Code Online (Sandbox Code Playgroud)

但对象属性可以更改(可变):

void main() {
  final obj1 = SampleObject(1, "value1");
  obj1.value = "value2";

  print(obj1.value);
}
Run Code Online (Sandbox Code Playgroud)

但如果你将类中的所有属性设置为final,它就会成为一个不可变对象:

class SampleObject {
  final int id;
  final String value;
  
  SampleObject(this.id, this.value);
}
Run Code Online (Sandbox Code Playgroud)

当您尝试为其属性重新分配值时,会出现错误:

void main() {
  final obj1 = SampleObject(1, "value1");

  // the following line will gives error:
  // 'value' can't be used as a setter because it's final.
  // Try finding a different setter, or making 'value' non-final
  obj1.value = "value2";
}
Run Code Online (Sandbox Code Playgroud)