我从一些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
个。这些子构建器的列表称为依赖项,并通过一些生成的方法表示。我将指出两个有趣的:
addDependencies
that takes a Chart.Builder
addDependenciesBuilder
that takes no arguments and returns the current Chart.Builder
(我首先要说的是我不知道第二种方法有什么用处。它似乎将一个新的构建器填充到一个内部列表然后......那就是它。)
在第一种方法的情况下,如果我提交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以相当粗略的方式对待这个主题。)