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

Gob*_*ins 8 java protocol-buffers

当我得到类似的东西

Message Foo{
    repeated Bar bar = 1;
}
Run Code Online (Sandbox Code Playgroud)

现在我想插入Bar的xy对象.每个都是在循环中创建的.

for(i=0; i < xy ; i++){
    //Add Bar into foo
}
//Build foo after loop
Run Code Online (Sandbox Code Playgroud)

这是可能的还是在构建foo对象之前我是否同时需要所有xy bar字段?

Ven*_*nki 14

当你使用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(); 
Run Code Online (Sandbox Code Playgroud)

要添加单个对象,您可以执行以下操作.

    Bar bar = new Bar();
    builder.addBar(bar);
    builder.build();
Run Code Online (Sandbox Code Playgroud)

使用您要求的用例编辑.


小智 5

List<Bar> barList= new Arraylist();
barList.add(new Bar());
Run Code Online (Sandbox Code Playgroud)

然后在Foo中设置Bar的列表

Foo foo =  Foo.newBuilder()
        .addAllBar(barList)
        .build;
Run Code Online (Sandbox Code Playgroud)

您只能为 Bar 设置一个值

Foo foo =  Foo.newBuilder()
        .addBar(new Bar())
        .build;
Run Code Online (Sandbox Code Playgroud)