【问题标题】:Recursive mixin in dart飞镖中的递归混合
【发布时间】:2022-11-10 18:15:42
【问题描述】:

我想在 Dart 中创建一个递归 mixin。这是我尝试过的:

mixin A<T extends Object> on Object {
  List<Object?> get list;
  List<Object?> get _list => [if (super is A) ...super._list, ...list];
}

但是这段代码给了我一个信息 lint,告诉我super 始终是A,但._list 也没有在super 中定义。

如果我尝试通过这样做来修复第二个 lint:

List<Object?> get _props => [if (super is A) ...(super as A)._props, ...props];

它给了我一个新的 lint 说 super as A 是不必要的演员表。

我想在这里实现的是Mixin,当添加到基类时,_list 将具有与list 相同的内容。但是,当我从基类中获得扩展类时,如果我覆盖list,则此类_list 会将基类list 添加到新类中。

【问题讨论】:

    标签: flutter dart recursion mixins


    【解决方案1】:

    您不能在 Dart 中将 super 视为自己的对象,因此您尝试的操作是不可能的,因为您无法确保存在 super._list 属性。这就是 on 通常的用途,但你不能让 mixin 依赖于它自己。

    一些替代方法是:

    • 创建一个声明_list 属性的抽象类,并让混入此mixin 的类对其进行扩展
    • 使包含super 的项目成为子类的责任,用package:meta's @mustCallSuper annotation 表示这一点

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多