请帮助我理解它的确切含义:
来自"Chapter 2. A Tour of the Dart Language"
的引用声明为final的本地,顶级或类变量在第一次使用时初始化
所以这是我的测试代码:
lazyTest(msg) => print(msg);
class Printer{
Printer(msg){
print(msg);
}
final finalClassVariable = lazyTest("final class variable");
}
var globalsAreLazy = lazyTest("top-level");
var lazyInitialized = lazyTest("lazy initialized");
void main() {
final localFinal = new Printer("local final");
var initialize = lazyInitialized;
}
输出:
最终类变量
当地最终的 懒惰初始化
finalClassVariable
和localFinal
都已初始化,只有globalsAreLazy
没有。 lazyInitialized
按照我的预期在访问时初始化。
答案 0 :(得分:7)
类变量是静态字段的另一个名称,因此您需要使finalClassVariable
为静态,因为它是惰性的。
本地变量的文本不正确。它们在执行声明时初始化,而不是在第一次读取时懒惰。
调用构造函数时,将初始化具有初始化表达式的非静态类字段。他们并不懒惰。
答案 1 :(得分:4)
finalClassVariable
是一个实例变量而不是类变量。要使其成为类变量,您必须添加static
。