最终和顶级延迟初始化

时间:2014-05-07 07:11:20

标签: dart

请帮助我理解它的确切含义:

来自"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;
}

输出:

  

最终类变量
  当地最终的   懒惰初始化

finalClassVariablelocalFinal都已初始化,只有globalsAreLazy没有。 lazyInitialized按照我的预期在访问时初始化。

2 个答案:

答案 0 :(得分:7)

类变量是静态字段的另一个名称,因此您需要使finalClassVariable为静态,因为它是惰性的。

本地变量的文本不正确。它们在执行声明时初始化,而不是在第一次读取时懒惰。

调用构造函数时,将初始化具有初始化表达式的非静态类字段。他们并不懒惰。

答案 1 :(得分:4)

finalClassVariable是一个实例变量而不是类变量。要使其成为类变量,您必须添加static