我在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;
}
当构造函数体执行时,final
字段已经被密封。
构造函数初始值设定项列表在超类的构造函数初始值设定项之前执行。
随后执行构造函数主体。构造函数主体允许执行任意代码,就像从字段中读取一样。这就是为什么此时必须完成最终字段的初始化,否则可能会读取尚未初始化的最终字段。
构造函数初始值设定项列表是受支持的窗口,可以在其中初始化最终字段。它不允许读取this
(显式或隐式)因此是安全的。
这只是确保对象初始化始终以可预测的方式发生的一种措施。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)