例如,当我们将最终字符串值赋值给变量时:
final String name = "john";
name = "patrick" //error: the final variable name can only be set once但是,我们可以在索引处更改值。
final List<String> listOfNames = ["bob", "steve", "john"];
liftOfNames[2] = "patrick"; //this is allowed
listOfNames = ["jhonny", "jim", "jack"]; //this isn't allowed(reassigning)因此,不允许重新分配最终变量,但允许在索引处更改最终列表的值?
发布于 2022-05-23 05:52:19
是。一点儿没错。没有选项(在Dart中,像C++这样的语言可以这样做)来标记方法是否更改实例。因此,调用list.length和list.clear(),甚至调用list.length和list.length = 5没有语法上的区别。dart编译器无法区分这是否是一个变异调用。
因此,将某些东西标记为final确实只会保护它不被重新分配。在您的示例中,列表变量永远不能被分配到另一个列表中。它可以被操纵以保存不同的值,但它总是相同的实例。
https://stackoverflow.com/questions/72343028
复制相似问题