将子字段添加到 DescriptorProto.Builder 协议缓冲区
Adding Sub Fields to a DescriptorProto.Builder Protocol Buffers
我最近开始研究 protobufs,发现以下问题很棘手。你能帮帮我吗?
示例代码:
DescriptorProto.Builder builder;
FieldDescriptorProto.Builder fieldBuilder = FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.setNumber(1)
.setDefaultValue("value");
builder.addField(fieldBuilder.build());
现在让字段的类型为FieldDescriptorProto.Type.TYPE_MESSAGE。
我必须将子字段添加到使用 fieldBuilder.
构建的字段中
这应该是可能的,因为当我为原型文件构建描述符文件时,其根消息具有带字段的嵌套消息。当我调试时,我发现 "A field of type message with its inner fields is added to the root message ",即对于以下消息,它表示为 rootMessage 有一个字段 subMessage(type = Message) 和两个子字段 B、C.
示例原型:
message rootMessage{
string A = 1;
message subMessage{
string B = 1;
string C = 2;
}
subMessage sub = 2;
}
通常我需要像
这样的东西
FieldDescriptorProto.Builder fieldBuilder = FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.addField(...) // **This Part**
.setNumber(1)
.setDefaultValue("value");
protobuf 使用的想法是通过在字段中添加 setTypeName 来向父项和 link 添加嵌套消息和字段,并添加嵌套消息字段中给出的名称 typeName
DescriptorProto.Builder builder;
FieldDescriptorProto.Builder fieldBuilder =FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.setTypeName("nestedMessageName")
.setNumber(1)
.setDefaultValue("value");
builder.addField(fieldBuilder.build());
builder.addNestedMessage(messageBuilder.setName("nestedMessageName").build());
我最近开始研究 protobufs,发现以下问题很棘手。你能帮帮我吗?
示例代码:
DescriptorProto.Builder builder;
FieldDescriptorProto.Builder fieldBuilder = FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.setNumber(1)
.setDefaultValue("value");
builder.addField(fieldBuilder.build());
现在让字段的类型为FieldDescriptorProto.Type.TYPE_MESSAGE。 我必须将子字段添加到使用 fieldBuilder.
构建的字段中这应该是可能的,因为当我为原型文件构建描述符文件时,其根消息具有带字段的嵌套消息。当我调试时,我发现 "A field of type message with its inner fields is added to the root message ",即对于以下消息,它表示为 rootMessage 有一个字段 subMessage(type = Message) 和两个子字段 B、C.
示例原型:
message rootMessage{
string A = 1;
message subMessage{
string B = 1;
string C = 2;
}
subMessage sub = 2;
}
通常我需要像
这样的东西FieldDescriptorProto.Builder fieldBuilder = FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.addField(...) // **This Part**
.setNumber(1)
.setDefaultValue("value");
protobuf 使用的想法是通过在字段中添加 setTypeName 来向父项和 link 添加嵌套消息和字段,并添加嵌套消息字段中给出的名称 typeName
DescriptorProto.Builder builder;
FieldDescriptorProto.Builder fieldBuilder =FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.setTypeName("nestedMessageName")
.setNumber(1)
.setDefaultValue("value");
builder.addField(fieldBuilder.build());
builder.addNestedMessage(messageBuilder.setName("nestedMessageName").build());