2016-06-28 264 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'和類似的方法。 –