Dart 初始化最终变量

Posted

技术标签:

【中文标题】Dart 初始化最终变量【英文标题】:Dart initializes the final variable 【发布时间】:2019-07-12 15:55:05 【问题描述】:

在 dart 中编写构造函数时遇到问题。我有一个类有两个final变量,在构造函数中初始化,下面是错误的,因为final变量没有setter方法:

class Person
  final String name;
  final int age; 

  // Error
  Person(String name, int age) 
    this.name = name;
    this.age = age;
  

但这是正确的,为什么

class Person
  final String name;
  final int age; 

  // Correct
  Person(String name, int age): this.name = name, this.age = age;

【问题讨论】:

【参考方案1】:

在执行构造函数体时,final 字段已经被密封。

构造函数初始化列表在超类的构造函数初始化之前执行。

构造函数体在之后执行。构造函数主体允许执行任意代码,就像从字段中读取一样。这就是为什么此时 final 字段的初始化必须已经完成,否则可能会从尚未初始化的 final 字段中读取。

构造函数初始值设定项列表是可以初始化最终字段的受支持窗口。它不允许读取this(显式或隐式),因此是安全的。

这只是确保对象初始化始终以可预测的方式发生的一种措施。

【讨论】:

所以没有办法初始化需要引用thisfinal 变量?如这里:***.com/questions/59449666/…? 不,那不可能。

以上是关于Dart 初始化最终变量的主要内容,如果未能解决你的问题,请参考以下文章

即使我在 initState 中初始化变量,Dart 也会抛出 LateInitializationError

在 dart 中覆盖类变量时出错

C#TS和Dart对比2:变量和作用域

Flutter入门Dart语言:简单易懂的变量指南

▩Dart-理解final与const

Dart语言学习 Dart的常量和变量