【问题标题】:Final and top-level lazy initialization最终和顶级延迟初始化
【发布时间】:2014-05-07 07:11:20
【问题描述】:

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

引用"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 按我的预期在访问时被初始化。

【问题讨论】:

  • 引用的文本现在已更改为不提及局部变量。

标签: dart


【解决方案1】:

类变量是静态字段的别称,所以你需要将finalClassVariable设为静态才能让它变得懒惰。

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

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

【讨论】:

    【解决方案2】:

    finalClassVariable 是实例变量而不是类变量。要使其成为类变量,您必须在前面加上 static

    【讨论】:

    • 知道了。但是为什么局部变量“localFinal”被初始化了呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2017-11-11
    相关资源
    最近更新 更多