我在网上的一些例子中注意到,扩展的类StatefulWidget具有标记为final的实例变量.这是为什么 ?我理解final关键字的作用.我不明白为什么用扩展widget类的每个实例变量声明它.
rmt*_*zie 18
因为StatefulWidget继承了标记为@immutable的Widget,所以StatefulWidget的任何子类也必须是不可变的(即所有字段都是final).
如果使用非final字段创建StatefulWidget子类,则会产生此DartAnalysis警告:
info:此类继承自标记为@immutable的类,因此应该是不可变的(所有实例字段必须是final).(在[...] lib的must_be_immutable ...... dart:23)
以及如何从StatefulWidget文档中使用StatefulWidget的说明:
StatefulWidget实例本身是不可变的,并且将它们的可变状态存储在由createState方法创建的单独State对象中,或者存储在State订阅的对象中,例如Stream或ChangeNotifier对象,其引用存储在StatefulWidget的最终字段中本身.
这个问题没有确定的答案。这是更偏爱的。
事实是,如果可以将变量声明为final,那么为什么不这样声明呢?final关键字完全不会伤害您的代码,并且可能有助于捕获错误。
实际上,您甚至可以启用自定义的linter规则prefer_final_locals,如果您拥有永不重新分配的非最终变量,则该规则将使编译失败。
这样可以进行双重健康检查:不可变的变量将无法更改。但是同时,如果您忘记对非最终变量进行突变,则编译器也会警告您。
| 归档时间: |
|
| 查看次数: |
13214 次 |
| 最近记录: |