2016-06-28 268 views
5

我似乎无法找到一种方法来验证protobuf消息中的字段的值,而不显式调用其getter。检查protobuf消息 - 如何按名称获取字段值?

我看到了一些使用Descriptors.FieldDescriptor实例到达消息映射内部的例子,但它们要么是基于迭代器的,要么是由字段编号驱动的。

一旦我有地图:

Map<Descriptors.FieldDescriptor, Object> allFields = myMsg.getAllFields(); 

我怎么能得到场"fieldXyz"的价值?

我知道我可以使用myMsg.getFieldXyz(),但这不能以系统的方式使用。

如果无法通过名称访问字段值,我想知道这个选择背后的基本原理。我可能仍然需要了解protobuf“哲学”:-)

回答

7

我不确定您在寻找Descriptors#findFieldByName(name)。您可以尝试以下操作:

FieldDescriptor fieldDescriptor = message.getDescriptorForType().findFieldByName("fieldXyz"); 
Object value = message.getField(fieldDescriptor); 
+1

这是一个有希望的方向。我如何知道应该将哪个Java类投入到该对象中?看看API,我只能看到返回'JavaType','Type'和类似的方法。 –