例如,我的树是:
class TreeNode {
List<TreeNode> children;
}
我正在寻找/希望在制作人中拥有以下东西:
@ProducerModule
class RecursiveModule {
@Produces
ListenableFuture<TreeNode> produceNode(/*...?*/) {
// Somehow recursively get a node.
}
}
这样它就可以动态解析一些外部源,并为我递归地构造一个节点。
一个更具体的小示例用例可能是构建 HN 新闻阅读器。在他们的 API 中,有一个Item
可能有多个子Item
。因此,要阅读包含所有评论的新闻项,需要获取根Item
并递归获取其子项。
*我是dagger生产商的新手,我正在尝试了解它能做什么。我不确定这种递归性是否打破了dagger名称中的"无环",但我很好奇这是否可能。
我(有点(有一个解决方法:
让组件将生产执行器作为参数传入。
@ProductionComponent(/* ... */)
class TreeComponent {
// ...
@ProductionComponent.Builder
interface Builder {
@BindsInstance
Builder executor(@Production Executor executor);
@BindsInstance
Builder id(@NodeId int id); // Say we need an id to know which node to process, or how to process a node.
// ...
}
}
然后,对于每个节点,处理节点本身,并为每个子节点创建一个生产者。
通过这种方式,我自己管理生产者树。但是生产者库仍然负责异步协调。我认为它仍然有好处。