如何测试协议缓冲区管理的列表中是否存在对象?

时间:2017-07-12 00:12:47

标签: java protocol-buffers

我从一些Protocol Buffers源代码生成了一个Java API。您可以在此处看到它:https://microbean.github.io/microbean-helm/apidocs/生成hapi.*包层次结构中的内容。这个API的语义对于这个问题并不重要。

作为使用此API的一部分,我需要汇编一个Chart

使用协议缓冲区,当您创建或改变事物时,您可以使用"构建器"。这些构建器具有build()方法,该方法返回它们负责构建的(不可变)对象。没关系。因此,在此生成的API中,Chart.Builder构建Chart s。

在此生成的API中,Chart.Builder具有" sub - "它包含的Chart.Builder个。这些子构建器的列表称为依赖项,并通过一些生成的方法表示。我将指出两个有趣的:

  1. addDependencies that takes a Chart.Builder
  2. addDependenciesBuilder that takes no arguments and returns the current Chart.Builder
  3. (我首先要说的是我不知道第二种方法有什么用处。它似乎将一个新的构建器填充到一个内部列表然后......那就是它。)

    在第一种方法的情况下,如果我提交Chart.Builder,则应该添加它。正是我需要的!

    好的,但现在我不想添加Chart.Builder(如果它已经存在)。 如何可靠地检查顶级构建器中是否存在子构建器?更一般地,在Protocol Buffers Java API中,如何在List构建器内检查构建器?

    (我知道我可以推出自己的"平等"检查员,但是我很担心,我可能完全错误地发现了杂草:也许这个 isn& #39; t 如何使用Protocol Buffers生成的代码构建对象图?)

    认为我可以调用getDependenciesBuilderList()方法,看看它是contains我的候选构建者。但是我发现这不起作用:java.util.List#contains(Object)会为传入的任何构建器返回false

    当使用从.proto文件生成的Java API时,当然这个非常简单的一对一列表模式有一个解决方案吗?如果是这样,我没有看到它。我怎么能做我想做的事?

    (为了进一步阅读,我已经通过https://developers.google.com/protocol-buffers/docs/javatutorial以相当粗略的方式对待这个主题。)

0 个答案:

没有答案