【问题标题】:Dart Mixin get super field valueDart Mixin 获取超字段值
【发布时间】:2021-09-10 06:47:43
【问题描述】:

基于一个类和一个mixin

class CounterModel extends MVAModel with CounterModelGeneratedCode {
  int counter = 2;
}

mixin CounterModelGeneratedCode on MVAModel {

int get counter => store.get("counter", () => (super as CounterModel).counter);
set counter(int value) => store.set("counter", value);
}

飞镖分析器没有抱怨,但在编译时我得到了一个

错误:不能使用 'super' 作为表达式。委托构造函数 对于超级构造函数,将超级调用作为初始值设定项。

如何访问 CounterModel 类的阴影值(例如 2 表示计数器)?

【问题讨论】:

  • 你的心智模型似乎落后了。 mixin 插入了一个CounterModel 派生自的超类。 CounterModel 是继承树中派生最多的类。

标签: dart mixins


【解决方案1】:

你不能这样做,分析器也应该发现语法错误。 您不能覆盖超调用的解析,您只能调用实际的超类成员。 此外,counter 在超类(即MVAModel)上不是,因此使用super 不是正确的方法。

您可以尝试(this as CounterModel).counter,它会起作用,但不是最佳选择。演员阵容不是必须的,我们可以做得更好。

在这种情况下,您可能想要的是将counter 变量的定义添加到mixin 声明中:

 abstract int counter;

那样,它需要混合它的类来定义这样一个计数器(然后一个类这样做)。 然后你可以调用 mixin 中的计数器,就像 this.counter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2023-03-19
    • 2021-12-11
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多