使用com.google.protobuf.descriptors.descriptor创建新的构建器



我需要为给定的com.google.protobuf.descriptors.descriptor.

创建类的newbuilder((。

我已经使用Google Proto缓冲区为以下协议创建了一个JAR:

message Foo
{
  optional uint32 id = 1;
  optional string fooName = 2;
}
message Bar
{
  optional uint32 id = 1;
  optional string barName = 2;
}

来自Java侧,基于描述符,我需要创建NewBuilder((。例如:

    Message.Builder message;
    if(Descriptor.getName().equals("Foo"))
        message = Foo.newBuilder();
    if(Descriptor.getName().equals("Bar"))
        message = Bar.newBuilder();

,但是如果其他或切换案例,我不想去。另外,我还尝试了使用DynamicMessage的其他方式。

Message.Builder message = DynamicMessage.newBuilder(descriptor);

但是,在这种情况下,我无法将其投入到 foo >或 bar 类中。还有其他方法可以使用描述符或描述符名称创建NewBuilder((?

盲目地需要给定的类名称的newbuilder((:

Message.Builder message = SomeUtilClass.getNewBuilder("Foo");

您无法从Descriptor创建BuilderDescriptor对于需要创建的原始(或建筑商(类的类型信息,因为所有Descriptor实例都是同一类(最终(。

如果您只能与Descriptor一起使用,则if/else大约是您所能获得的。(我大致说是因为您可以用地图或开关来完成;但基本上是相同的(。

一种更好的方法是使用您要创建的原始原型的默认实例(或该原型的任何其他实例;但是默认实例最简单得出(。

Message prototype = Foo.getDefaultInstance();  // Or Bar.getDefaultInstance().

因为从 Message中,您可以同时获得构建器和描述符:

Message.Builder builder = prototype.newBuilderForType();
Descriptor descriptor = prototype.getDescriptorForType();

最新更新