2016-06-28 17 views
5

Wygląda na to, że nie mogę znaleźć sposobu na sprawdzenie wartości pola wewnątrz komunikatu protobuf bez jawnego wywoływania jego funkcji pobierającej.Badanie komunikatu protobuf - jak uzyskać wartości pól według nazwy?

Widzę przykłady, które powodują użycie instancji Descriptors.FieldDescriptor, aby dotrzeć do mapy wiadomości, ale są one oparte na iteratorze lub są sterowane przez numer pola.

Raz mam mapę:

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

jaki sposób można uzyskać wartość pola "fieldXyz"?

Wiem, że mogę używać myMsg.getFieldXyz(), ale nie można tego użyć w sposób systematyczny.

Jeśli nie ma sposobu, aby uzyskać dostęp do wartości pól według ich nazw, chciałbym wiedzieć, jakie jest uzasadnienie tego wyboru. Być może muszę jeszcze zrozumieć "filozofię" protobuf :-)

Odpowiedz

7

Nie jestem pewien, czy szukasz Descriptors#findFieldByName(name). Możesz wypróbować:

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

To idzie w obiecującym kierunku. Jak mogę się dowiedzieć, do której klasy Java powinienem oddać obiekt? Patrząc na API widzę tylko metody zwracające 'JavaType',' Type' i podobne. –

Powiązane problemy