如何在构建消息之前在 protobuf 中设置重复字段?
How to set repeated fields in protobuf before building the message?
假设我有一条包含重复字段的消息:
Message Foo {
repeated Bar bar = 1;
}
现在我想将 n
个栏对象插入字段栏中,每个对象都是在循环中创建的。
for (i=0; i < n; i++){
//Add Bar into foo
}
//Build foo after loop
这可能吗,或者我是否需要在构建 foo 对象之前同时需要所有 n
bar 字段?
当您使用 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();
根据您请求的用例进行了编辑。
List<Bar> barList= new Arraylist();
barList.add(new Bar());
然后在Foo中设置Bar的列表
Foo foo = Foo.newBuilder()
.addAllBar(barList)
.build;
Bar 只能设置一个值
Foo foo = Foo.newBuilder()
.addBar(new Bar())
.build;
假设我有一条包含重复字段的消息:
Message Foo {
repeated Bar bar = 1;
}
现在我想将 n
个栏对象插入字段栏中,每个对象都是在循环中创建的。
for (i=0; i < n; i++){
//Add Bar into foo
}
//Build foo after loop
这可能吗,或者我是否需要在构建 foo 对象之前同时需要所有 n
bar 字段?
当您使用 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();
根据您请求的用例进行了编辑。
List<Bar> barList= new Arraylist();
barList.add(new Bar());
然后在Foo中设置Bar的列表
Foo foo = Foo.newBuilder()
.addAllBar(barList)
.build;
Bar 只能设置一个值
Foo foo = Foo.newBuilder()
.addBar(new Bar())
.build;