我似乎无法在没有显式调用其getter的情况下找到验证protobuf消息中字段值的方法。
我看到有关使用Descriptors.FieldDescriptor
实例到达消息映射内部的示例,但它们要么基于迭代器,要么由字段编号驱动。
我有地图后:
Map<Descriptors.FieldDescriptor, Object> allFields = myMsg.getAllFields();
如何获取字段"fieldXyz"
的值?
我知道我可以使用myMsg.getFieldXyz()
,但这不能系统地使用。
如果没有办法按名字访问字段值,我想知道这个选择背后的理由是什么。我可能仍然需要了解protobuf“哲学”: - )
答案 0 :(得分:16)
我不确定您是否在寻找Descriptors#findFieldByName(name)
。您可以尝试以下方法:
FieldDescriptor fieldDescriptor = message.getDescriptorForType().findFieldByName("fieldXyz");
Object value = message.getField(fieldDescriptor);
答案 1 :(得分:6)
我知道这是为Java标记的,但是万一有人在寻找在c ++中获取值的方法:(假设:field = FieldDescriptor *包含int32)
int32_t value = message_1.GetReflection()->GetInt32(message_1, field);
花了我一段时间才找到它,却没有找到任何stackoverflow引用,因此添加了它。希望能帮助到你。谢谢!