我有一个Descriptors.Descriptor
实例,我想向其中添加一些元数据字段。
假设我们的描述符当前具有以下字段:
name
和address
。
我想添加一个类似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
字段。