【发布时间】:2015-07-22 22:00:08
【问题描述】:
我想将另一种格式的对象转换为 protobuf,知道 protobuf 的描述符。对于常规字段甚至嵌套字段来说,这很容易做到。但是,我遇到了重复字段的问题。
message Foo {
optional MsgA a = 1;
repeated MsgB b = 2;
}
对于“MsgA a”,代码 bld.getFieldBuilder(field) 有效:
Foo.Builder bld = Foo.newBuilder();
Descriptors.Descriptor msgDesc = Foo.getDescriptor();
List<Descriptors.FieldDescriptor> fields = msgDesc.getFields();
for (Descriptors.FieldDescriptor field : fields) {
Message.Builder subBld = bld.getFieldBuilder(field);
// set foreign value xyz using subBld
// subBld.setFleld(subfield1, xyz);
}
但是对于“MsgB b”,相同的代码会抛出“UnsupportedOperationException: getFieldBuilder() 调用非消息类型。”
我理解重复字段是一个列表,我可以单独设置每个字段。但是,我如何首先获得建造者?有没有一种干净简单的方法来做类似的事情?
感谢您的任何意见。
【问题讨论】:
-
我已经尽我所能回答了,但我并不完全清楚你想要达到什么目的。
标签: java protocol-buffers builder