如何在构建消息之前在protobuf中设置重复字段?

2022-09-02 20:35:42

假设我有一个带有重复字段的消息:

Message Foo {
    repeated Bar bar = 1;
}

现在我想将Bar对象插入到字段栏中,每个对象都是在循环中创建的。n

for (i=0; i < n; i++){
    //Add Bar into foo
}
//Build foo after loop

这是可能的,还是在构建 foo 对象之前,我需要同时使用所有条形字段?n


答案 1

当您使用protoc命令生成java对象时,它将创建一个Foo对象,该对象将具有自己的构建器方法。

你最终会做这样的事情

//Creates the builder object 
Builder builder = Package.Foo.newBuilder();
//populate the repeated field.
builder.addAll(new ArrayList<Bar>());
//This should build out a Foo object
builder.build(); 

要添加单个对象,您可以执行类似如下操作。

    Bar bar = new Bar();
    builder.addBar(bar);
    builder.build();

使用您请求的用例进行编辑。


答案 2
List<Bar> barList= new Arraylist();
barList.add(new Bar());

然后在 Foo 中设置 Bar 列表

Foo foo =  Foo.newBuilder()
        .addAllBar(barList)
        .build;

您只能为条形图设置一个值

Foo foo =  Foo.newBuilder()
        .addBar(new Bar())
        .build;

推荐