我需要为给定的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
创建Builder
。Descriptor
对于需要创建的原始(或建筑商(类的类型信息,因为所有Descriptor
实例都是同一类(最终(。
如果您只能与Descriptor
一起使用,则if/else
大约是您所能获得的。(我大致说是因为您可以用地图或开关来完成;但基本上是相同的(。
一种更好的方法是使用您要创建的原始原型的默认实例(或该原型的任何其他实例;但是默认实例最简单得出(。
Message prototype = Foo.getDefaultInstance(); // Or Bar.getDefaultInstance().
因为从 Message
中,您可以同时获得构建器和描述符:
Message.Builder builder = prototype.newBuilderForType();
Descriptor descriptor = prototype.getDescriptorForType();