Constructor 为什么Dart中最终字段的初始化错误?

Constructor 为什么Dart中最终字段的初始化错误?,constructor,dart,final,Constructor,Dart,Final,我有一个简单的类,包含两个最终字段,其中一个是存储数据的映射,另一个是调用时更新数据的step函数: 类数据 { //每个名字都有一个观察列表 最终地图(dataMap);; /** *更新步骤 */ 最后一步_updateStep; 步骤只是一个类型定义 现在,我想要一个有一个参数的构造函数:一个函数,它接受一个引用Map,并返回一个新的步骤。这在我看来是合乎逻辑的,更新程序需要一个对Map的引用来更新它 那么为什么这个构造函数失败了呢 数据(步骤初始值设定项(映射数据引用)) :_data

我有一个简单的类,包含两个最终字段,其中一个是存储数据的映射,另一个是调用时更新数据的step函数:

类数据
{
//每个名字都有一个观察列表
最终地图(dataMap);;
/**
*更新步骤
*/
最后一步_updateStep;
步骤
只是一个
类型定义

现在,我想要一个有一个参数的构造函数:一个函数,它接受一个引用
Map
,并返回一个新的
步骤。这在我看来是合乎逻辑的,更新程序需要一个对Map的引用来更新它

那么为什么这个构造函数失败了呢

数据(步骤初始值设定项(映射数据引用))
:_dataMap=新映射(),
_updateStep=初始值设定项(_dataMap);
错误在第二步

非法隐式访问接收方“this”


什么?它是如何泄漏的?如何修复它?

您正在阅读
\u dataMap
初始值设定项(\u dataMap)
).
\u datamap
是this
的一个字段,它不是一个参数。正如错误消息所说,您不能从构造函数初始值设定项中的“this”读取字段。

Günter Zöchbauer已经解释了错误的原因

以下是一个解决方法:

数据(步骤初始值设定项(映射数据引用))
:this._internal(初始值设定项,new Map());
数据._内部(初始值设定项、映射)
:_dataMap=map,
_updateStep=初始值设定项(map);

I get
初始化器中只能访问静态成员。
请检查您发布的代码。构造函数名为
AgentData
类名为
Data
似乎有些错误/不完整。很抱歉,由于简化了此示例,AgentData是一个输入错误。那么我如何继续在cons中使用我的字段呢然后是tructor?你可以分配给它,在构造函数体中你可以读取它们,但是初始化最终字段太晚了。我认为你不能初始化两个相互依赖的最终字段。你需要“计算”值,然后再将它们传递给构造函数,只需使用`(this.dataMap,this.\u updateStep)分配结果即可或者使用初始值设定项列表。谢谢,你是对的,但对于Java来说,这似乎是一场毫无意义的舞蹈。Dart很年轻,设计者不想一下子释放所有可能的功能,因为它使语言复杂化。他们希望语言稳定,并详细了解出现的问题在改进和完善规则并添加新功能之前,请使用当前设计(例如,参见mixin,其中他们明确表示应在某个时候取消限制)Dart有许多新概念,所有功能也需要转换为JavaScript。没有人能在一个大版本中完成这一切。Java需要20年才能成为现在的样子。没问题,我不知道人们从哪里来,他们的期望是什么。Dart团队总是好奇人们遇到了什么问题,因此我认为功能请求那太好了。