如何制作飞镖地板类型转换器的继承层次结构?

发布于 2025-02-13 07:05:39 字数 1512 浏览 0 评论 0原文

如下所示,我定义listConverter< t>以制作继承层次结构。

abstract class ListConverter<T> extends TypeConverter<List<T>, String> {
  static const delimiter = "!DELIMITER!";

  T fromDB(String databaseValue);

  String toDB(T value);

  @override
  List<T> decode(String databaseValue) {
    return databaseValue
        .split(delimiter)
        .where((element) => element.isNotEmpty)
        .map((e) => fromDB(e))
        .toList();
  }

  @override
  String encode(List<T> value) {
    return value.map((e) => toDB(e)).join(delimiter);
  }
}

使用listConverter&lt; t&gt;,我实现intlistConverter

class IntListConverter extends ListConverter<int> {
  @override
  int fromDB(String databaseValue) {
    return int.parse(databaseValue);
  }

  @override
  String toDB(int value) {
    return value.toString();
  }
}

我的计划是使用listConverter&lt; t&gt;strignlistListConverter等上使用。 但是不幸的是,我在运行floe_generator时收到了此错误消息。

[严重] floor_generator:lober_generator在lib/persistence/db/app_database.dart上: 只有从TypeConverter继承的类才能用作类型转换器。确保使用从TypeConverter继承的类。

我知道层次结构(b)效果很好,但是我想构建用于管理其他列表转换器的(A)结构。

  • (a)typeconverter-&gt; listConverter-&gt; intlistConverter
  • (b)typeconverter-&gt; intlistConverter

如何制作飞镖地板类型转换器的继承层次结构?

As below, I define ListConverter<T> to make inheritance hierarchy.

abstract class ListConverter<T> extends TypeConverter<List<T>, String> {
  static const delimiter = "!DELIMITER!";

  T fromDB(String databaseValue);

  String toDB(T value);

  @override
  List<T> decode(String databaseValue) {
    return databaseValue
        .split(delimiter)
        .where((element) => element.isNotEmpty)
        .map((e) => fromDB(e))
        .toList();
  }

  @override
  String encode(List<T> value) {
    return value.map((e) => toDB(e)).join(delimiter);
  }
}

Using ListConverter<T>, I implement IntListConverter.

class IntListConverter extends ListConverter<int> {
  @override
  int fromDB(String databaseValue) {
    return int.parse(databaseValue);
  }

  @override
  String toDB(int value) {
    return value.toString();
  }
}

My plan was to use ListConverter<T> also on StringListConverter, etc.
But unfortunately, I got this error message while running floor_generator.

[SEVERE] floor_generator:floor_generator on lib/persistence/db/app_database.dart:
Only classes that inherit from TypeConverter can be used as type converters. Make sure use a class that inherits from TypeConverter.

I know that Hierarchy (B) works well, but I want to build (A) structure for managing other list converters.

  • (A) TypeConverter -> ListConverter -> IntListConverter
  • (B) TypeConverter -> IntListConverter

How to make inheritance hierarchy for Type Converter of Dart Floor?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

过气美图社 2025-02-20 07:05:39

我以回旋的方式解决了这个问题。
我使用mixin关键字而不是直接继承。

class IntListConverter extends TypeConverter<List<int>, String>
    with ListConverter<int> {
  @override
  int fromDB(String databaseValue) {
    return int.parse(databaseValue);
  }

  @override
  String toDB(int value) {
    return value.toString();
  }
}

I resolved this problem in a roundabout way.
I use mixin keyword instead of direct inheritance.

class IntListConverter extends TypeConverter<List<int>, String>
    with ListConverter<int> {
  @override
  int fromDB(String databaseValue) {
    return int.parse(databaseValue);
  }

  @override
  String toDB(int value) {
    return value.toString();
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文