例如,我的树是:
class TreeNode {
List<TreeNode> children;
}
我正在寻找/希望在制作人中有一些东西,例如:
@ProducerModule
class RecursiveModule {
@Produces
ListenableFuture<TreeNode> produceNode(/*...?*/) {
// Somehow recursively get a node.
}
}
以便它可以动态地解析某些外部源,并为我递归构造一个节点。
一个更具体的小示例用例可能是构建HN新闻阅读器。在他们的API中,有一个Item
可能有多个子Item
。因此,要阅读包含所有评论的新闻,需要获取根Item
并递归获取其子项。
*我是匕首制作人的新手,我正在尝试学习它可以做什么。我不确定这种递归是否会打破匕首的名字中的“非循环”,但我很好奇这是否可行。
答案 0 :(得分:0)
我(有点)有一个解决方法:
让组件将生产执行程序作为参数传入。
@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.
// ...
}
}
然后为每个节点处理节点本身,并为每个孩子创建一个生产者。
通过这种方式,我可以自己管理生产者树。但是生产者库仍然负责异步协调。我认为仍然有好处。