Java中的缓冲区Google Protobufs:如何获取消息。字段描述符的生成器?
我在协议缓冲区中定义了一个消息字段的字段描述符。我想开始为该字段构造一个值,但我一直在尝试获取消息。这个字段描述符的生成器。我写的代码非常通用——它被设计为在MongoDB和协议缓冲区之间序列化——所以我不能对我今天碰巧使用的对象使用任何专门的逻辑
FieldDescriptor的JavaType是MESSAGE。它的MessageType要好一点,因为它包含消息的类型,但类型在协议缓冲区名称空间中,所以我仍然无法使用反射为它获取消息(至少不是干净的)
我不知道还能做什么。任何人都知道如何构建消息。FieldDescriptor中的生成器
# 1 楼答案
如果有包含类型的生成器的实例,则可以通过以下方式获取字段的生成器:
或者,您可以为字段类型的消息(但不具体是现有实例的字段)获取新的生成器:
如果您根本没有包含类型的实例,但知道包含类,则可以执行以下操作:
如果您甚至不知道包含的类(可能它甚至不在您的jar中),并且您所拥有的只是一个描述符,那么您可以使用
DynamicMessage
:但是,请注意
DynamicMessage
只模拟真实类的反射接口;它实际上不是真实类的实例(正如protoc
生成的那样)。而且,它比真正的类慢得多