ゲッターを明示的に呼び出さずにprotobufメッセージ内のフィールドの値を確認する方法を見つけることができないようです。
メッセージマップ内に到達するために_Descriptors.FieldDescriptor
_インスタンスを使用する例が見られますが、それらはイテレータベースであるか、フィールド番号によって駆動されます。
地図を入手したら:
_Map<Descriptors.FieldDescriptor, Object> allFields = myMsg.getAllFields();
_
フィールド_"fieldXyz"
_の値を取得するにはどうすればよいですか?
私はmyMsg.getFieldXyz()
を使用できることを知っていますが、これは体系的な方法では使用できません。
名前でフィールド値にアクセスする方法がない場合は、この選択の背後にある理由を教えてください。 protobufの「哲学」をまだ理解していないかもしれません:-)
Descriptors#findFieldByName(name)
をお探しですか。あなたは以下で試すことができます:
FieldDescriptor fieldDescriptor = message.getDescriptorForType().findFieldByName("fieldXyz");
Object value = message.getField(fieldDescriptor);
私はこれがJavaのタグが付けられていることを知っていますが、誰かがc ++で値を取得する方法を探している場合:(仮定:フィールド= FieldDescriptor * int32を含む)
int32_t value = message_1.GetReflection()->GetInt32(message_1, field);
これを取得するにはしばらく時間がかかり、stackoverflow参照が見つからなかったため、追加しました。それが役に立てば幸い。ありがとう!