/sf/answers/3919309621/
\n评论:
\n\n\n“初始化后无法更改”是不明确的。最终变量不能重新分配,但对象可以改变。\xe2\x80\x93\njamesdlin\n2 月 19 日 17:43
\n
\n\n最终变量的值无法更改。最终修改变量
\n
这两种说法是什么意思?请举例说明。
\n考虑下面的类:
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)