如何更改生成的描述符

时间:2019-06-24 07:30:23

标签: java protobuf-java google-protocol-buffer

我有一个Descriptors.Descriptor实例,我想向其中添加一些元数据字段。

假设我们的描述符当前具有以下字段: nameaddress

我想添加一个类似user_id

的字段

Descriptors.Descriptor类上没有可用的setter函数,因此我将其转换为DescriptorProto,然后转换为Builder

代码:

descriptor = descriptor.toProto().toBuilder()
           .addField(FieldDescriptorProto.newBuilder().setNumber(my_index)                .setType(Descriptors.FieldDescriptor.Type.INT64.toProto()).setName("user_id"))
.getDescriptor();

当我这样做时,描述符包含一些奇怪的字段,例如:

0: Descriptors$FieldDescriptor@254 "google.protobuf.DescriptorProto.name"
1: Descriptors$FieldDescriptor@154 "google.protobuf.DescriptorProto.field"
2: Descriptors$FieldDescriptor@207 "google.protobuf.DescriptorProto.extension"
3: Descriptors$FieldDescriptor@208 "google.protobuf.DescriptorProto.nested_type"
4: Descriptors$FieldDescriptor@209 "google.protobuf.DescriptorProto.enum_type"
5: Descriptors$FieldDescriptor@210 "google.protobuf.DescriptorProto.extension_range"
6: Descriptors$FieldDescriptor@211 "google.protobuf.DescriptorProto.oneof_decl"
7: Descriptors$FieldDescriptor@212 "google.protobuf.DescriptorProto.options"
8: Descriptors$FieldDescriptor@213 "google.protobuf.DescriptorProto.reserved_range"
9: Descriptors$FieldDescriptor@214 "google.protobuf.DescriptorProto.reserved_name"

因此,它没有添加字段,而是完全修改了描述符。

有什么方法可以向描述符添加字段? 预期的结果是,如果我执行descriptor.getFields(),它应该给我三个结果,其中还包含user_id字段。

0 个答案:

没有答案