【发布时间】:2022-07-21 21:19:48
【问题描述】:
我为我的数据库 crud 操作设置了一组很好的通用函数。对于一些专门的功能,我需要更细粒度的控制。我希望能够按属性搜索数据库对象列表。似乎不可能,有一个警告 - 所有对象都将具有 uuid 的属性,这是我想要搜索的。太好了……用 SO 的一些天才头脑一定是可能的。
当然,我想做这样的事情:
Future<int> getExampleIndexByUUID({required String uuid}) async
=> await Hive.openBox<Example>('Example_Box')
.then((box) => box.values.toList().indexWhere(example)
=> example.uuid == uuid);
但以上对于泛型类型是不可能的:
Future<T> getExampleIndexByUUID<T>({
required T objectType,
required String uuid,
}) async => await Hive.openBox<T>(objectDatabaseNameGetter(objectType))
.then((box) => box.values.toList().indexWhere(example)
=> example... ); // Dead end- no property access here
PS 我知道我可以在通用函数之外创建方法来处理这个问题。我还可以创建另一个大型开关盒来处理这个问题,但这是我想要避免的。我想学习在这种情况下更好地抽象我的代码。任何帮助或指针表示赞赏!如果我唯一的选择是拥有一个开关盒或在功能之外进行工作,那就这样吧。
【问题讨论】:
-
我不确定我是否理解你的问题(你没有解释为什么它不可能或为什么代码是“死胡同”),但如果你的意思是你想访问不同的基于泛型类型的属性,将回调传递给泛型函数以访问所需的属性。
-
是的,这正是我的意思,因为泛型类型我没有属性访问权限(在我所说的“死代码”的地方)。我将更新我的问题以更具体。我将如何构建该回调?我不知道该怎么做?
标签: flutter dart generics abstraction