匕首生产者可以动态/递归地生成树结构



例如,我的树是:

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.
    // ...
  }
}

然后,对于每个节点,处理节点本身,并为每个子节点创建一个生产者。

通过这种方式,我自己管理生产者树。但是生产者库仍然负责异步协调。我认为它仍然有好处。

最新更新